すべてのブラウザの選択ボックスからオプションを非表示にすることはできません。オプションを配列に格納し、実際にselect要素から削除する必要があります。おそらく、最初のselect要素が変更されたときに、不要なオプションを省略して、2番目のselect要素を再構築する方が簡単です。
カカロットのフィドルをベースとして、次のようにします。
デモ
これはすべてのブラウザで機能するはずです。
select1でまだ何も選択していない場合、オプションが表示されないようにフィドルを更新しました。
最終コード:
HTML
<select name="select1" id="category">
<option value="0">None</option>
<option value="1">First</option>
<option value="2">Second</option>
</select>
<select name="items" id="select2">
<option value="0" class="1">Item 1</option>
<option value="1" class="1">Item 2</option>
<option value="2" class="2">Item 3</option>
<option value="3" class="2">Item 4</option>
</select>
JS
/* Taking an array of all options-2 and save it on select1 */
$("#category").data('options',$('#select2 option').clone());
$("#select2").html("");
$("#category").change(function() {
var itemClass = $(this).val();
var options = $(this).data('options').filter('.' + itemClass);
$('#select2').html(options);
});
更新
:追加の説明
この行:
$("#category").data('options',$('#select2 option').clone());
最初の選択ボックスを選択し、この.data
方法を使用して、その選択ボックスにデータを添付します。どのデータ?ボックス2を選択するすべてのオプションに含まれています。どのように?すべてのオプションを選択することにより、ボックス2に含まれるものを選択し、それらを複製します(コピーします)。
このコレクションを何度も使用できるため、そのオプションのセットが保存されます。選択ボックス1から選択した値を使用してコレクションをフィルタリングし、残りのオプションを選択ボックス2のコンテンツとして設定して、以前にあったオプションを置き換えます。それはこの行で起こります:
var options = $(this).data('options').filter('.' + itemClass);
したがって、オプションを非表示にする必要はありません。毎回、使用可能なすべてのオプションのフィルターされたセットに置き換えます。