Насколько я знаю, скрытие опций выбора работает только в Firefox, поэтому для кросс-браузерной совместимости вам нужно использовать немного больше хитрости (см. этот вопрос и этот вопрос среди других). Вот что я предлагаю:
Для HTML имейте скрытую копию вашего выбора, а также версию, которую вы в настоящее время предоставляете:
<select id="company">
<option selected="true" >ALL</option>
<option>GM</option>
<option>Honda</option>
<option>Ford</option>
</select>
<br />
<div id="namesDiv">
<select id="names" multiple="multiple" size="8">
<option>Chevy [GM]</option>
<option>Buick [GM]</option>
<option>Civic [Honda]</option>
<option>Accord [Honda]</option>
<option>Focus [Ford]</option>
</select>
</div>
<select id="baseNames" multiple="multiple" size="8">
<option>Chevy [GM]</option>
<option>Buick [GM]</option>
<option>Civic [Honda]</option>
<option>Accord [Honda]</option>
<option>Focus [Ford]</option>
</select>
Скрыть basenames
с помощью CSS display:none
.
Тогда для вашего jQuery вы будете регулярно заменять names
клонированной версией baseNames
и фильтровать ее.
$(document).ready(function() {
$("#company").change(function() {
$("#namesDiv").empty();
$("#baseNames").clone().appendTo("#namesDiv").attr("id", "names");
var val = $(this).find("option:selected").val();
if(val !== "ALL") {
$("#names option").each(function() {
if($(this).val().indexOf(val) < 0) {
$(this).remove();
}
});
}
});
});
Вы можете увидеть это в действии .