Mi campo de selección se filtra de la siguiente manera:
$("#asortyment option").filter(function() { $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1); });Para cambiar la opción seleccionada, uso el código:
function wiecej(){ var asort_select = document.getElementById("asortyment"); asort_select.selectedIndex = asort_select.selectedIndex + 1; $("#asortyment").trigger("change"); };Pero el problema es que la función wiecej cambia la opción a la siguiente pero no filtra la selección.
Use la pseudoclase jQuery :visible para hacer coincidir los elementos no filtrados. Y use :gt para comenzar después de la opción seleccionada actualmente.
function wiecej() { var asort_select = document.getElementById("asortyment"); let current = asort_select.selectedIndex; let next = $(`#asortyment option:gt(${current}):visible`).first(); if (next.length > 0) { $(asort_select).val(next.val()).change(); } };Filtre las opciones visibles y luego cambie el índice seleccionado:
function wiecej(){ var asort_select = document.getElementById("asortyment"); var nextItem = $("#asortyment option:gt("+asort_select.selectedIndex+")").filter(function(){ return $(this).css('display') != 'none';}).first(); var nextIndex = 0; if (nextItem.length > 0 ) { nextIndex = nextItem[0].index; } else { var nextItem = $("#asortyment option").filter(function(){ return $(this).css('display') != 'none';}).first(); nextIndex = nextItem[0].index; } asort_select.selectedIndex = nextIndex; $("#asortyment").trigger("change"); };