2013-01-13 14 views
9

var burada:

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

Bu jQuery kodu:

$("#menu option").first().attr("value") 

döner hi, olsa bile hiçbir value niteliği yoktur Menüdeki ilk seçenekte.

<option>, value özniteliğine sahipse, beklendiği gibi value özniteliği döndürülür.

Yukarıdaki kodun dönüş değeri nasıl olabilir undefined/başka bir şey tanımlayabilir miyim? Ya da value özniteliğinin ayarlanıp ayarlanmadığını kontrol edebilir miyim?

+1

Bir örtük 'value' özniteliği var. Muhtemelen seçicinizde ': not ([value])' i denemek istersiniz. –

cevap

18

Kullanım :not([attr]) seçici döndürür:

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

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

Ben de doğrulanmış olduğunu değiştirdikten sonra, [value] hâlâ doğrulanmamış olarak raporlanıyor, böylece 01 olmadan aynı iki öğeyi almaya devam ediyorsunuzözniteliği.

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

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

+0

"Değeri" olmayan ilk seçenek olup olmadığını kontrol etmem gerekiyor. Gönderdiğim gönderiye dayanarak şunu denedim: 'if ($ (" # menü seçeneği: not ([value]) ") first() === $ (" # menu option "). First())' with no şans (her zaman 'yanlış'). Hiç fikrin var mı? (Tarayıcı konsolunda iki seçicinin aynı öğeyi döndürdüğünü doğruladım) – stackunderflow

+0

Tamam, anladım: '($ (" # menü seçeneği: değil ([değer]) ") [0] === $ ("# menü seçeneği") [0]) '. '[0]' (.first() 'yerine jQuery nesnesi döndürür. Teşekkürler. – stackunderflow

+1

Elbette, bkz .: http://jsfiddle.net/userdude/NQm54/3/ $ .is() 'yi kullanın, çok daha temiz ve doğrudan. –

1

Değer değeri ayarlanmamışsa değer varsayılan değer olarak metin değerine ayarlanır. Nitelik değerini, o değeri tanımlayabilmeniz için bir değere ayarlayın.

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

aşağıda gösterildiği gibi boş bir dize O zaman bu $("#menu option").first().attr("value") boş dize

+1

Teşekkürler, ancak bunu bir eklenti içinde kullanıyorum ve bu nedenle eklenti kullanıcılarının HTML kodu üzerinde hiçbir kontrolüm yok. – 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

bunu kullanın $("option:selected", $("#menu")).attr("value");

Belirlenen seçenek herhangi bir değer niteliği yoksa, tanımsız sen! Foo yoluyla yakalayabilir hangi iade edilecektir

İlgili konular