Я работаю над выпадающим фильтром, который использует функцию изменения.
Теперь, когда я пробую этот фильтр, напрямую изменяя выбранный параметр, он работает нормально, но когда я пытаюсь изменить выбранное значение с помощью параметров 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 элементов не соответствовал категории фильтра.
Попробуйте вызвать событие изменения в поле выбора. Элемент option не тот, который меняется.
функция getUrlParameter() реализована заранее и работает нормально.



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


Ваш вопрос был немного непонятным. Там что-то не так с вашим кодом. Я думаю, это то, что вам нужно. Я сбежал от функции 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?
URL-адрес выглядит так: site.com/filterpage?category=opt1
да, если в URL-адресе указано значение opt1, будет отображаться только div opt1. Вы этого не хотите? Можете подробно описать ожидаемый результат.
Я постараюсь быть более конкретным: если вы посмотрите на эту скрипку: jsfiddle.net/wspzhjmy/8, вы увидите, что после выбора Option1 он отображает два div. Но в моем случае, когда я пробую это с указанными параметрами url, он будет отображать только первый div, хотя второй div также имеет значение = opt1
Кажется, все работает нормально, когда я имитирую значение opt1 в своем фрагменте кода. Можете ли вы попробовать console.info(getUrlParameter('category')); и посмотреть, какое значение возвращает функция?
Я проверил, и возвращаемое значение - opt1, если бы его не было, то ни один элемент не отображался бы, верно?
Да, но это странно, поскольку, как вы можете видеть в моем фрагменте, я поместил opt1 в то же место, где функция поместит значение, и он работает, как задумано. Вероятно, у вас есть другой код, который вы не публиковали, и который вызывает проблему.
Да, я тоже вижу, что при жестком кодировании параметра URL в приведенном выше фрагменте он работает ... Я думаю, он действительно приходит к выводу, что другой сценарий может быть причиной проблемы, даже если я не знаю, какой окажет на него такое влияние. Буду держать вас в курсе, спасибо за вашу помощь.
Поскольку он только при начальной загрузке, он, вероятно, находится в одном из обработчиков событий $(document).ready(). Начни искать там. Отличный способ сделать это - избежать всего связанного кода. Если проблема больше не возникает, отключайте куски кода один за другим, пока не найдете проблему. Удачи.
Где у тебя функция
getUrlParameter()?