JQuery, вызывающий событие изменения с триггером, срабатывает только один раз

Я работаю над выпадающим фильтром, который использует функцию изменения.

Теперь, когда я пробую этот фильтр, напрямую изменяя выбранный параметр, он работает нормально, но когда я пытаюсь изменить выбранное значение с помощью параметров URL, свойство отображения (которое динамически изменяется в функции фильтра) изменяется только для первого элемента. found и все остальные элементы с правильным значением фильтрации не получают свойство блокировать.

Я использую эту функцию-фильтр:

$(document).ready(function() {
    $('.customFilter select').change(function(e) {
        e.preventDefault();
        var filterValue = $('#myDropdown').val();

        var filterSelector = '#container .filter-item' + '.' + filterValue);

        $('#jpagescontainer .photo-item').css('display','none');
        $(filterSelector).css('display','block');
    });
});

и вот моя функция для изменения выбранного значения с URL-параметрами:

$(document).ready(function() {
    var cat = getUrlParameter('category');

    $('#myDropdown option[value=' + cat + ']').attr("selected", "selected");
    $('#myDropdown option[value=' + cat + ']').trigger('change');
});

Две переменные фильтра остаются неизменными для обоих вызовов.

И мой HTML выглядит примерно так:

<div class = "customFilter">
    <select id = "myDropdown" class = "filter">
        <option value = "" selected = "selected">Show all</option>
        <option value = "opt1">Option1</option>
        <option value = "opt2">Option2</option>
    </select>
</div>

<div id = "container">
    <div class = "filter-item opt1">
        <p>Some Text 1</p>
    </div>
    <div class = "filter-item opt2">
        <p>Some Text 2</p>
    </div>
</div>

Что-то не так с функцией URL-адреса или мне что-то не хватает?

Обновлено:

Я в значительной степени понял это благодаря помощи Марка Байдженса ... проблема была вызвана дополнительным скриптом, который ограничивал показанные элементы до 20, и так уж получилось, что ни один из первых 20 элементов не соответствовал категории фильтра.

Где у тебя функция getUrlParameter()?

Kiran Joshi 20.07.2018 09:38

Попробуйте вызвать событие изменения в поле выбора. Элемент option не тот, который меняется.

Mark Baijens 20.07.2018 09:43

функция getUrlParameter() реализована заранее и работает нормально.

Joey 20.07.2018 09:51
Поведение ключевого слова "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) для оценки ваших знаний,...
0
3
142
1

Ответы 1

Ваш вопрос был немного непонятным. Там что-то не так с вашим кодом. Я думаю, это то, что вам нужно. Я сбежал от функции getUrlParameter, потому что она не работает в сниппетах. Я заменил это значением на opt1, чтобы имитировать значение функции url.

$(document).ready(function() {
    $('.customFilter select').change(function(e) {
        e.preventDefault();
        var filterValue = $('#myDropdown').val();
        
        if (filterValue === '') {
            var filterSelector = '#container .filter-item';
        }
        else {
            var filterSelector = '#container .' + filterValue;
        }

        $('#container .filter-item').hide();
        $(filterSelector).show();
    });
    var cat = 'opt1'; //getUrlParameter('category');

    $('#myDropdown').val(cat);
    $('#myDropdown').trigger('change');
});
.filter-item {
  display: none;
}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class = "customFilter">
    <select id = "myDropdown" class = "filter">
        <option value = "" selected = "selected">Show all</option>
        <option value = "opt1">Option1</option>
        <option value = "opt2">Option2</option>
    </select>
</div>

<div id = "container">
    <div class = "filter-item opt1">
        <p>Some Text 1</p>
    </div>
    <div class = "filter-item opt1">
        <p>Some Text 2</p>
    </div>
    <div class = "filter-item opt2">
        <p>Some Text 3</p>
    </div>
</div>

Можно ли иметь несколько значений в категории URL-адреса? А вы можете показать, как выглядит ваш URL?

Mark Baijens 20.07.2018 10:14

URL-адрес выглядит так: site.com/filterpage?category=opt1

Joey 20.07.2018 10:16

да, если в URL-адресе указано значение opt1, будет отображаться только div opt1. Вы этого не хотите? Можете подробно описать ожидаемый результат.

Mark Baijens 20.07.2018 10:19

Я постараюсь быть более конкретным: если вы посмотрите на эту скрипку: jsfiddle.net/wspzhjmy/8, вы увидите, что после выбора Option1 он отображает два div. Но в моем случае, когда я пробую это с указанными параметрами url, он будет отображать только первый div, хотя второй div также имеет значение = opt1

Joey 20.07.2018 10:22

Кажется, все работает нормально, когда я имитирую значение opt1 в своем фрагменте кода. Можете ли вы попробовать console.info(getUrlParameter('category')); и посмотреть, какое значение возвращает функция?

Mark Baijens 20.07.2018 10:26

Я проверил, и возвращаемое значение - opt1, если бы его не было, то ни один элемент не отображался бы, верно?

Joey 20.07.2018 10:29

Да, но это странно, поскольку, как вы можете видеть в моем фрагменте, я поместил opt1 в то же место, где функция поместит значение, и он работает, как задумано. Вероятно, у вас есть другой код, который вы не публиковали, и который вызывает проблему.

Mark Baijens 20.07.2018 10:31

Да, я тоже вижу, что при жестком кодировании параметра URL в приведенном выше фрагменте он работает ... Я думаю, он действительно приходит к выводу, что другой сценарий может быть причиной проблемы, даже если я не знаю, какой окажет на него такое влияние. Буду держать вас в курсе, спасибо за вашу помощь.

Joey 20.07.2018 10:46

Поскольку он только при начальной загрузке, он, вероятно, находится в одном из обработчиков событий $(document).ready(). Начни искать там. Отличный способ сделать это - избежать всего связанного кода. Если проблема больше не возникает, отключайте куски кода один за другим, пока не найдете проблему. Удачи.

Mark Baijens 20.07.2018 10:53

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