2012-04-18 73 views
1

これは間違った質問ですが、私は固執しています。なぜ私の最初のものは動作しますが、他のものは動作しません3.ドキュメントを読むことから、4人すべてが仕事をしなければなりません。より大きなユースケースでフォームの要素を取得したい場合は、他のフォームや他のdiv内に同じ名前の同じページに他の要素が存在する可能性があるので、4番目のオプションは本当に働きたいものです。しかし、私はこれらのすべてがなぜ機能しないのか理解できません。jquery子要素の値を取得

http://jsfiddle.net/7vF5z/1/

HTML:

<form id="filter_form_id" name="filter_form" method="get" action="/retrieved_data_records"> 

<select id="brand_id" name="brands"> 
<option value="0"></option> 
<option value="143272526">Brand1</option> 
<option selected="selected" value="269998788">Brand2</option> 
<option value="330516076">Brand3</option> 
<option value="330516077">Brand4</option> 

</select> 
</form> 

JS:

alert ("The val: " + $('#brand_id').val());  
alert ("The val: " + $('brands').val()); 
alert ("The val: " + $('#filter_form_id brands').val()); 
alert ("The val: " + $('#filter_form_id > brands').val()); 

+0

です。第4フォームは子セレクタであると考えられますか? – JMM

+1

'あなたは読んでいるのですか? o_O –

答えて

2

それは要素名だかのようにあなたのセレクタがbrands使用。 [name="brands"]のような属性セレクタを使用する必要があります。

更新テストケース:http://jsfiddle.net/7vF5z/3/

alert ("The val: " + $('#brand_id').val());  
alert ("The val: " + $('[name="brands"]').val()); 
alert ("The val: " + $('#filter_form_id [name="brands"]').val()); 
alert ("The val: " + $('#filter_form_id > [name="brands"]').val()); 

第四のオプションは、私は本当に

を作業したいものであるが、子セレクタことになっている場合は、あなたが修正する必要がありますそれによって:

  • 正しい子セレクタ構文の使用
  • 私の例のように属性セレクタを使用する。

同じフォームの同じnameの値を持つ複数のコントロールを持たない限り、そこに子セレクタを使用する本当の理由はありません。

+0

ありがとう、あなたのアプローチを使用するためにjsfiddleを更新しました。http://jsfiddle.net/7vF5z/4/ – Joelio

+0

なぜ他の回答が正しいと選択されたのかわからないのですが、 。それは "分前"の時間が間違っていることを示し続け、順序をフリップするが、 "分前"にカーソルを置くと実際の時間が表示されます。 – JMM

+0

は彼が最初のように思えたが、もしあなたのことが私と一緒に良かったら、両方の素晴らしい答え! – Joelio

8

どこからこれらのセレクタを取得していますか?

  1. $('brands').val()は、そのnodeNamebrands(それらのいずれも)ある要素を探しています。名前を確認するには$('[name="brands"]').val()
  2. $('#filter_form_id brands')を使用する属性を持つnodeName ID(それらの間違いなし)filter_form_idされていない要素の子孫であるbrands(それらのいずれも)ある要素を探しています。
  3. $('#filter_form_id => brands')は完全に無効です。子セレクタが必要な場合$('#filter_form_id > brands')

詳しくはjQuery documentationのセレクタを参照してください。

+0

+1すばらしい答え!なぜこれが受け入れられなかったのか分かりません:s –

2

brandsのような単純な文字列を使用するため、jQueryはその名前のタグを検索するためです。そしてbrandsはタグではありません。それ以外の方法は、$('select[name="brands"]').val()

1
// OK 
alert ("The val: " + $('#brand_id').val()); 
// there is no tag <brands /> 
alert ("The val: " + $('brands').val()); 
// there is still no tag <brands /> 
alert ("The val: " + $('#filter_form_id brands').val()); 
// KO, doesn't mean anything 
alert ("The val: " + $('#filter_form_id => brands').val()); 
関連する問題