У меня есть функция для загрузки всех данных из файла JSON, и я показываю совпадающие данные, если data[i]['brand_id'] == modelId
<script>
function loadModel(modelId) {
$.ajax({
type: "POST",
dataType: 'json',
url: '/api/model.json',
success: function (data) {
$.each(data, function (i, v) {
if (data[i]['brand_id'] == modelId) {
$('#item-brand-list').append('<option data-brand-id = "' + modelId + '" value = "' + data[i]['id'] + '">' + data[i]['name'] + '</li>');
}
});
}
});
}
</script>
Эта функция будет выполняться в этом фрагменте:
<script>
$(document).on('click', '.SelectOption', function () {
var val = $(this).attr('data-val');
loadModel(val); // here
});
</script>
Например, если какие-либо данные (из JSON) равны заданному modelId, он добавляет согласованные данные в select option, но я хочу скрыть select-ads-brand, если совпадения нет.
Я пытался:
<script>
if (data[i]['brand_id'] == modelId) {
$('#select-ads-brand').show();
$('#item-brand-list').append('<option data-brand-id = "' + modelId + '" value = "' + data[i]['id'] + '">' + data[i]['name'] + '</li>');
} else {
$('#select-ads-brand').hide();
}
</script>
HTML:
<div id = "select-ads-brand">
<select id = "item-brand-list">
<option>-- Select --</option>
</select>
</div>
Но безуспешно, я считаю плохой логикой скрывать этот div.
Любое предложение?
@rohankangale .show() и .hide() делают то же самое.
Сделайте полный поток в PLNK с поддельным json req (тайм-аут), и мы исправим это для вас
Вы не можете использовать функцию отображения / скрытия для div. Вы должны использовать свойство «display».
Кто сказал, что @rohankangale?
Проблема в том, что вы просматриваете данные в цикле, поэтому он может сначала скрывать элемент, но на последней итерации снова отображается, как если бы условие прошло.
да именно проблема в том. @CodeNewbie
это сработало для вас?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте использовать следующее:
function loadModel(modelId) {
$.ajax({
type: "POST",
dataType: 'json',
url: '/api/model.json',
success: function(data) {
var foundMatch = false;
$.each(data, function(i, v) {
if (data[i]['brand_id'] == modelId) {
$("#select-ads-brand").show(); // if match found show the div
$('#item-brand-list').append('<option data-brand-id = "' + modelId + '" value = "' + data[i]['id'] + '">' + data[i]['name'] + '</li>');
foundMatch = true; // set variable to true on success of match
}
});
// if no match found simply hide the div
if (!foundMatch) $("#select-ads-brand").hide();
}
});
}
вы можете просто использовать функцию filter и проверить, как это
const filtereddata = data.filter(ele => ele['brand_id']==modelId);
if (filtereddata.length > 0)
{
//add filtered data
$.each(filtereddata, function (i, v) {
$('#item-brand-list').append('<option data-brand-id = "' +
modelId + '" value = "' + data[i]['id'] + '">' + data[i]
['name'] + '</li>');
});
//show
$('#select-ads-brand').show();
}
else
{
//hide
$('#select-ads-brand').hide();
}
Попробуйте это для отображения: $ ('# select-ads-brand'). Css ('display', 'block') и для скрытия: $ ('# select-ads-brand'). Css ('display', 'никто');