2011-08-08 12 views
0

私は<select>タグを持っており、選択したオプションの値を選択する必要があります。 jQueryを使ってjQueryと 'select'タグ

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

私はこのようにそれを行うためにval()メソッドを使用しよう:

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

問題は、それが常に1を返すことである - 選択されたオプションのデフォルト値!

なぜそうですか?

+0

ID「foo」の別の要素がある可能性はありますか? – Phil

+0

@Phil Nop、そうではない。 – daGrevis

答えて

4

これを試してみてください:この

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

チェック

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

編集:あなたのセレクタに使用されている属性を使用すると、IDを持つ複数のDOM要素を持っている場合DEMO here

+0

'undefined'を返します。 – daGrevis

+0

私は 'live()'を使う必要があると思います。 '$( '#foo').val()'を持っているときの使い方? – daGrevis

+0

@daGervis。 $( "#foo option:selected")を使う必要があります。または$( "#foo:selected")。val();選択した値を取得するval() –

2

<select>要素にselected属性のオプションが含まれていない場合、最初のオプションがデフォルトとして選択されます。

選択を変更してval()を実行すると、別の値が得られます。

それは

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

それは問題です!ユーザーが他のオプションを選択しても常に最初のオプションが選択されます。 – daGrevis

+0

@daGrevis私はそれを複製することはできません。私はあなたの試しに何かで私の答えを更新しました。 – Phil

+0

すべてのオプションを含む 'select'タグを返し、' value'属性を修正しました。何とか助けてくれますか? – daGrevis

2

を変更するたびにこれを試してみてください、これを試してみて、それはまだあなたに同じ値を与えるなら、私に教え:

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

それは私に同じ結果を与えます。いつでも第1オプションのみ。 – daGrevis

+0

これは不必要で、[API](http://api.jquery.com/val/) – Phil

+0

@Philにも記載されています。 – thecodeparadox

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

これも発生する可能性があります。

jQueryはイベントをすべての要素に正しくバインドしますが、その値を要求するときにDOMの最初のもののみを使用します。