РЕДАКТИРОВАТЬ: Обновленный ответ.
Я бы настоятельно рекомендовал использовать элементы <optgroup>
для группировки баз в каждом штате.
Таким образом, вам не понадобятся все
для создания отступов, и это хорошо смотрится, когда вы устанавливаете состояние как label
.
<select name='input_13' id='input_13' class='small gfield_select' tabindex="2">
<option value='-1' selected='selected'>Select a base</option>
<optgroup class="level-0" value='29' label="Alabama">
<option class="level-1" value="30">Anniston Army Depot</option>
<option class="level-1" value="333">Fort Rucker</option>
<option class="level-1" value="32">Maxwell-Gunter AFB</option>
<option class="level-1" value="33">Redstone Arsenal</option>
</optgroup>
<optgroup class="level-0" value="34" label="Alaska">
<option class="level-1" value="35">Eielson AFB</option>
<option class="level-1" value="36">Elmendorf AFB</option>
<option class="level-1" value="37">Fort Greely</option>
<option class="level-1" value="38">Fort Richardson</option>
<option class="level-1" value="39">Fort Wainwright</option>
<option class="level-1" value="40">USCG ISC Kodiak</option>
<option class="level-1" value="41">USCG Juneau</option>
<option class="level-1" value="42">USCG Ketchikan</option>
</optgroup>
<optgroup class="level-0" value="43" label="Arizona">
<option class="level-1" value="44">USCG whatever</option>
<option class="level-1" value="45">USCG whatever</option>
</optgroup>
</select>
Это также немного упрощает ваш код, поскольку вы можете выбрать все дочерние элементы optgroup
.
Пример: http://jsfiddle.net/asBSU/3/
jQuery(document).ready(function() {
var clone_select = $('#input_13').clone();
jQuery('#input_1_34').bind('change', function() {
var selectedValue = jQuery("#input_1_34").val();
var clone_subset = clone_select
.find('optgroup[value="' + selectedValue + '"] > option')
.clone();
$('#input_13').empty().append(clone_subset);
});
});
Я думаю, вы могли бы избавиться и от всех этих level-n
классов.
Мы могли бы даже упростить и очистить код примерно так:
Пример: http://jsfiddle.net/asBSU/4/
jQuery(document).ready(function() {
var clone_groups = $('#input_13 > optgroup').clone();
jQuery('#input_1_34').bind('change', function() {
clone_groups.eq( this.selectedIndex )
.children()
.clone()
.appendTo( $('#input_13').empty() );
});
});
Это потому, что индекс каждого <option>
в первом <select>
будет соответствовать индексу требуемого <optgroup>
в клонированном <select>
.
Оригинальный ответ:
Используйте метод clone()
[docs] , чтобы сохранить клон всего <select>
, который имеет длинный список.
Когда значение выбирается из первого, сделайте следующее:
Затем из списка, который находится на странице, используйте:
Пример: http://jsfiddle.net/XrFr7/2/
jQuery(document).ready(function(){
var clone_select = $('#input_13').clone();
jQuery('#input_1_34').bind('change', function() {
var selectedValue = jQuery("#input_1_34").val();
var clone_subset = clone_select.find('option')
.filter('[value="' + selectedValue + '"]')
.nextUntil('.level-0')
.clone();
$('#input_13').empty().append( clone_subset );
});
});