Показать / скрыть div на основе сопоставленных данных json

У меня есть функция для загрузки всех данных из файла 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.

Любое предложение?

Попробуйте это для отображения: $ ('# select-ads-brand'). Css ('display', 'block') и для скрытия: $ ('# select-ads-brand'). Css ('display', 'никто');

Rohan Kangale 03.04.2018 14:11

@rohankangale .show() и .hide() делают то же самое.

tour travel 03.04.2018 14:12

Сделайте полный поток в PLNK с поддельным json req (тайм-аут), и мы исправим это для вас

bresleveloper 03.04.2018 14:13

Вы не можете использовать функцию отображения / скрытия для div. Вы должны использовать свойство «display».

Rohan Kangale 03.04.2018 14:14

Кто сказал, что @rohankangale?

ivp 03.04.2018 14:15

Проблема в том, что вы просматриваете данные в цикле, поэтому он может сначала скрывать элемент, но на последней итерации снова отображается, как если бы условие прошло.

CodeNewbie 03.04.2018 14:17

да именно проблема в том. @CodeNewbie

tour travel 03.04.2018 14:22

это сработало для вас?

Pranay Rana 03.04.2018 19:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
8
1 129
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте использовать следующее:

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();
}

Другие вопросы по теме