2013-01-13 14 views
9

はありません選択>オプションにメニューの最初のオプションを選択します。

<option>value属性がある場合、期待どおりvalue属性が返されます。

私は上記のコードの戻り値をundefined /私が特定できる他のものにすることができますか?または、value属性が設定されているかどうかを確認し、そうでない場合は上記のコードのみを実行できますか?

+1

てキャプチャすることができた返されます。この$("option:selected", $("#menu")).attr("value");

を使用します暗黙の 'value'属性があります。セレクタで ':not([value])'を試してみてください。 –

答えて

18

:not([attr])セレクタを使用して返します。 [value]はまだ設定されていないと報告されるため、01のない同じ2つの要素を引き続き受け取ります属性。

$('#menu').change(function(){ 
    console.log($(this).val()); 
    console.log($("#menu option:not([value])")); 
}); 

http://jsfiddle.net/userdude/NQm54/2/

+0

'value'を持たない最初のオプションかどうかを確認する必要があります。あなたの投稿に基づいて私は試してみました: 'if($("#メニューオプション:not([value]) ")first()=== $("#menu option ")。first())' no運(常に 'false')。あなたはなにか考えはありますか? (私はブラウザのコンソールで2つのセレクタが同じ要素を返すことを確認しました) – stackunderflow

+0

OK、私はそれを持っています: '($("#メニューオプション:not([value]) ")[0] === $( "#メニューオプション")[0]) '。 '.first()'の代わりに '[0]'(要素を返します)(jQueryオブジェクトを返します)。ありがとう。 – stackunderflow

+1

確かに、http://jsfiddle.net/userdude/NQm54/3/を参照してください。 '$ .is()'を使うと、はるかにクリーンで直接的です。 –

1

value属性が設定されていない場合、値の既定値はテキスト値です。属性値を特定できるように、属性値を設定してください。私はまた、変更した後ことを確認し

$("#menu option:not([value])"); 

http://jsfiddle.net/userdude/NQm54/

:空の文字列

<select id="menu"> 
    <option value="">hi</option> 
    <option>bye</option> 
</select> 

下に示すように、この$("#menu option").first().attr("value")が空の文字列

+1

ありがとう、しかし、私はこれをプラグインで使用しているため、プラグインユーザーのHTMLコードを制御できません。 – stackunderflow

1
var option = document.getElementById("menu").options[0]; 
if (option.getAttribute("value") !== null) { 
console.log("Has value: " + option.value); 
} 
else { 
console.log("Doesn't have a value."); 
} 
2
$("#menu option:eq(0)").not("[value]").length == 1 
0

選択されたオプションは、任意の値属性を持っていない場合は、未定義のは、あなたが!fooの

関連する問題