2011-03-16 4 views
1

を選択したときに、私はDIVのクラスを非表示にする事業部を隠すjQueryのオプションが

<select id="tagtype" name="type"> 
     <option value="type_s">Standard</option> 
     <option value="type_o">Overstock</option> 
     <option value="type_snd">Scratch &amp; Dent</option> 
     <option value="type_mult">Multiples</option> 
    </select> 

<div class="multiples>stuff here</div> 

<script type="text/javascript"> 
$(document).ready(function() { 
    if ($("#tagtype option[value='type_mult']").length) 
    $("multiples").css('display','none'); 

}); 
</script> 
+0

"複数の"オプションを非表示にしたいのですか? – Raja

+0

私はあなたが答えを受け入れるために待つ必要があることを嫌い、時には私はそれを忘れて、リマインダーのおかげで! – ToddN

答えて

6

これを行うには良い方法は、おそらく次のようになります。あなたはハンドラを結合している

jQuery(document).ready(function() { 
    jQuery("#tagtype").change(function() { 
     if(jQuery(this).find("option:selected").val() == "type_mult") { 
     jQuery(".multiples").hide(); 
     } 
    }); 
}); 

選択ボックスのonChangeイベントに転送します。選択ボックスで新しいオプションを選択すると、いつでもハンドラが呼び出されます。

ハンドラでは、thisは、onChangeイベントを発生させた選択ボックスを参照します。選択したオプションの値を探します。この値が "type_mult"に等しい場合、クラスmultiplesを持つすべての要素を非表示にします。

既存のコードの問題は、1回だけ実行されることです。ページが最初に読み込まれたとき。選択ボックスの変更に応答する必要があります。そのため、onChangeイベントにバインドする必要があります。別の問題は、ifステートメントです。 onChangeハンドラでコードを使用した場合でも、 "type_mult"値のオプションが選択されているかどうかをチェックしていないため、タイプごとにifブロックが入力されます。それが存在するかどうかを確認するだけです。 は常になので、ifのコードは常に実行されます。また、クラス名を使用する場合は、クラス名の前にピリオドを付ける必要があります。したがって、$(.multiples)を実行したいだけでなく、$(multiples)(後者は、あなたが望むものではないmultiplesという名前のタグを検索します)。

+0

これはありがとうございました! – ToddN

0

は、もう少し情報が必要 - あなたはこのコードを実行するときに実際に何が起こりますか?

私の推測では、第二のjQueryのセレクタが間違っているということでしょう

$(".multiples").css('display','none'); 
+0

何も起こらない、私は '倍数'オプションを選択し、何も起こりません。私はあなたが言及したコードを使用しており、実際にコードが正しくなっていれば正しく動作します。 – ToddN

関連する問題