2011-08-08 52 views
0

我有一個<select>標籤,我需要選擇所選選項的值。jQuery和'select'標籤

<select id="foo"> 
    <option value="1">a</option> 
    <option value="2">b</option> 
    <option value="3">c</option> 
</select> 

使用jQuery我嘗試使用val()方法來做到這一點是這樣的:

$('#foo').val(); 

的問題是,它總是返回1 - 所選選項的默認值!

這是爲什麼?

+0

難道你有可能擁有ID爲「foo」的另一個元素嗎? – Phil

+0

@Phil Nop,不是這樣。 – daGrevis

回答

4

試試這個

$("#foo option:selected").val(); 

編輯:如果你有一個id多於一個DOM元素屬性您正在使用您的選擇DEMO here

+0

它返回'undefined'。 – daGrevis

+0

我認爲我需要使用'live()'。如何在$'('#foo')。val()'?時使用它? – daGrevis

+0

@daGervis。你必須使用$(「#foo option:selected」)。val();或$(「#foo:selected」)。val(); $('#foo')。val()得到選定的值 –

2

<select>元素不包含selected屬性的選項時,它默認選擇第一個選項。

如果更改選擇並運行val(),則會得到不同的值。

試試這個,告訴我,如果它仍然給你相同的值每次改變

$('#foo').change(function() { 
    console.log($(this).val()); 
}); 
+0

這就是問題所在!即使用戶選擇了其他選項,它也始終選擇第一個選項。 – daGrevis

+0

@daGrevis我無法複製它。我已經更新了我的答案,以供您嘗試。 – Phil

+0

它返回帶有所有選項的'select'標籤並更正'value'屬性。它有幫助嗎? – daGrevis

2

試試這個時間:

$('#foo :selected').val(); 

檢查:

$('#foo').change(function() { 
    console.log($('#foo :selected').val()); 
}).change(); // this change will fire for first time and give the value `1` 
+0

它給了我相同的結果。每當只有第一個選項。 – daGrevis

+0

這是不必要的,甚至記錄在[API](http://api.jquery.com/val/) – Phil

+0

@我知道。 – thecodeparadox

0
$("select option:selected").each(function() { 
    $(this).val(); 
}); 
0

這也可能發生。

jQuery將正確地將事件綁定到所有元素,但在請求其值時僅使用DOM中的第一個元素。