Скажем, у меня есть два спуска, которые заполняются, когда мои jsp загружаются
<select id="Group" name="group"> -- first drop down <option value="0001">1</option> <option value="0002">2</option> </select> <select id="subGroup" name="class"> -- second drop down <option value="0001-000">A</option> -- sub group associated with option value 001 <option value="0001-010">B</option> <option value="0001-020">C</option> <option value="0001-030">D</option> <option value="0001-040">E/option> <option value="0002-000">F</option> -- sub group associated with option value 002 <option value="0002-010">G</option> <option value="0002-020">H</option> <option value="0002-040">I</option> </select>
Теперь мне нужно отфильтровать второй снимок на основе выбранного значения при первом выпадающем списке. Я не могу использовать PHP-код, который использует методы обратного вызова DB. в моем сценарии у меня есть что-то вроде этого.
$("#Group").change(function() { var groupVal = $(this).find("option:selected").val(); $('#subGroup option').filter(function( {return!$(this).val().indexOf(groupVal)!=-1);}).remove(); });
скрипт работает нормально, он удаляет все параметры, кроме выбранного. но моя проблема заключается в том, что в следующий раз, когда я выберу другое значение при первом выпадающем списке, второе падение будет пустым. Я даже работал с hide / show, но думаю, что они не будут работать с <select>
🙁
есть ли какой-либо способ, с помощью которого я могу повторно заполнить второе падение, когда я выбрал какой-то другой вариант при первом выпадающем списке?
Если вы удаляете элементы, вы не получаете их обратно. Используйте hide()
и show()
как вы сами предложили:
$("#Group").change(function() { var groupVal = $(this).find("option:selected").val(); $('#subGroup option').hide(); $('#subGroup option[value^='+groupVal+']').show(); });
Другими словами, каждый раз, когда #Group
selectbox #Group
скройте все параметры в #subGroup
и покажите только те, чей атрибут value
начинается с groupVal
.
Сохраняйте все параметры для второго блока выбора в массив при загрузке страницы. Затем заполните поле выбора из этого массива при изменении. Вы удаляете вторую «партию» опций, чтобы они больше не появлялись в следующий раз, когда вы захотите их использовать.
Для этого вам нужно где-то сохранить все доступные параметры, а затем повторно заполнить этот набор данных. например
var availableOptions = { 'groupOne': {/* options as {value: '', text: ''} */}, 'groupTwo': {/* options as {value: '', text: ''} */} }; $("#Group").change(function() { var groupVal = $(this).find("option:selected").val(); var sub = $('#Subgroup'); $.each(availableOptions[groupVal], function(i, data){ sub.append('<option value="'+data+'">'+data.text+'</option>'); });
Есть также связанный плагин выбора блока от Remy sharp, с которым у меня был успех, если вы хотите попробовать:
http://remysharp.com/2007/09/18/auto-populate-multiple-select-boxes/