2012-04-18 177 views
1

這是一個愚蠢的問題,但我卡住了。爲什麼我的第一個工作,而不是其他工作3.從閱讀文檔,所有4個應該做的工作。我想在一個更大的用例中獲取一個表單的元素,在其他表單或其他div中可能有同一頁面上的其他元素具有相同的名稱,所以第四個選項是我真正想要的。但我無法弄清楚爲什麼所有這些都不起作用。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 2012-04-18 13:02:32

+1

'從閱讀文檔你正在閱讀哪些文檔? o_O – 2012-04-18 13:02:45

回答

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 2012-04-18 13:54:59

+0

不知道你爲什麼選擇其他答案是正確的(或爲什麼它有更多upvotes),但FYI,我的更早。它不斷顯示「最近的」時間錯誤並翻轉順序,但如果您將鼠標懸停在「最近的」之前,則會顯示實際時間。 – JMM 2012-04-18 14:03:38

+0

看起來像他的第一個,但如果你的是我的罰款,這兩個很好的答案! – Joelio 2012-04-18 21:26:16

8

你從哪裏得到這些選擇器?

  1. $('brands').val()正在尋找其nodeNamebrands(沒有人)元素。要檢查name屬性使用$('[name="brands"]').val()
  2. $('#filter_form_id brands')正在尋找其nodeName元素是brands(都沒有),這是一個元素ID爲filter_form_id(絕對沒有人)的後裔。
  3. $('#filter_form_id => brands')是完全無效的。如果你想要你想要的孩子選擇器$('#filter_form_id > brands')

欲瞭解更多文檔資料,請查閱jQuery documentation瞭解可用選擇器。

+0

+1很好的回答!不知道爲什麼這不是被接受的:s – 2012-04-19 02:30:46

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());