2012-01-31 21 views
2

私はDOM内のいくつかのオブジェクトに対して変更イベントトリガーを作成しようとしています。披露させて;私はこのコード複数のDOMオブジェクトのjQuery単一イベント

$(document).ready(function() { 
    $(".select_something").change(function() { 
     if (!($(".select_something option[value='0']").attr("selected"))) { 
      $(".write_something").css('display',''); 
     } 
     else 
     { 
      $(".write_something").css('display','none'); 
     } 
    }); 
}); 

そして、これで私は.select_somethingと呼ばれているすべては、いくつかのセレクタ/ドロップダウンを持っています。 のオプションがのデフォルト値(0)でない場合は、<textarea></textarea>が表示され、すべてが.write_somethingと表示されます。

全く単純な機能です。

私が経験している問題は、これが最初の.select_something.write_somethingペアにのみ影響し、残りは影響を受けないということです。

私は.find().parent().children()と混ぜて試してみました。

トリガーされたときに私の.select_something.write_somethingのペアがすべて変更されるようにするにはどうすればよいですか?

編集:IDは、もちろんクラスとされていました。

+2

IDは一意でなければならず、同じIDを持つ複数の要素が無効です。 IDセレクタは、そのIDを持つDOMの最初の要素のみを選択します。代わりにクラスを使用してください。 –

+2

あなたのHTMLを含めることができますか?jQueryの '# 'セレクタは' ID'属性セレクタを意味します - IDはDOM要素のために一意でなければなりません...これはおそらく動作しない理由です... – ManseUK

+0

コードからペーストあなたがJQueryをよく知っているのを見ることができます。 'id'はユニークでなければならないことを知りませんか? – gdoron

答えて

3
#select_something 

です。 ID でなければなりません。同じidを持つ複数の要素がある場合、それは基本的には間違っています(大きな問題を引き起こします)。

これは言いましたが、修正は簡単です:これらのIDをCSSクラスに変更します。

<select id="select_something"> 

その後、あなたはCSSクラスに対して選択することができ、もちろん、あなたが選択する必要があります

<select class="select_something"> 

次のようになります。現在の選択に対するwrite_something要素を。

$(".select_something").change(function() { 
    if (!($("option[value='0']", this).attr("selected"))) { 
     $(this).siblings(".write_something").css('display',''); 
    } 
    else 
    { 
     $(this).siblings(".write_something").css('display','none'); 
    } 
}); 
+0

その場合、対応する '.write_something'要素はおそらく異なって選択されるべきです。 –

+0

@Felix - もちろんです。ありがとうございました –

+0

あなたのガイドラインありがとうございます。相対的な要素に対してイベントを動作させるために、私のアプリケーションで少し微調整を行いました。あなたの助けにとても感謝しています@AdamRackis! –

2

共通のIDではなく、複数のオブジェクトに共通のクラスを使用する必要があります。

ID属性は、単一のアイテムを識別するために使用されます。 CLASS属性は、項目が同じクラス名を持つ項目のグループの一部であることを定義するために使用されます。

は、それらのすべてにクラス名selectObjectを使用して、...ここで

$(document).ready(function() { 
    $(".selectObject").change(function() { 

     //inside of an event, $(this) refers to the object that triggers the event, 
     //in this case, the item that was clicked. 

     if (!($(this).val()==0)) { 
      ... 
     } 
     else 
     { 
      ... 
     } 
    }); 
}); 

は、説明のためのものです。 http://jsfiddle.net/FxLSR/1/

2

他の回答とコメントで述べたように、一意の要素にはIDのみを使用し、複数の要素にはクラスを使用します。

これは私がセットアップ私のコードだろうかです:要素はのように隣同士に配置することができない場合は

$(document).ready(function() { 
    $(".select_something").change(function() { 
     if (!($(this).val() == "0") { 
      $(this).next().show(); 
     } 
     else 
     { 
      $(this).next().hide(); 
     } 
    }); 
}); 

HTML:

<div> 
    <select class="select_something"> ... </select> 
    <textarea class="write_something"> ...</textarea> 
</div> 
<div> 
    <select class="select_something"> ... </select> 
    <textarea class="write_something"> ...</textarea> 
</div> 

etc... 

のJavascript私が与えたHTMLコードの例では、すべてのテキスト領域を選択していないような相対セレクタを使用してテキスト領域を選択してください。たとえば、2人が兄弟であるが、隣り合わせでない場合は、次のようになります。$(this)兄弟( "。write_something")

+0

+1しかし、それがあなたの構造体なら、parent()の代わりにnext()を使用してみてはどうでしょうか? –

+0

良い点です。その正確な構造では、next()を使う方が合理的です。 – ggreiner

関連する問題