2010-02-12 2 views

Antwort

158

Verwenden Sie die Attribute Equals Selector

var thevalue = 'foo'; 
var exists = 0 != $('#select-box option[value='+thevalue+']').length; 

Wenn der Wert der Option über Javascript gesetzt wurde, das wird nicht funktionieren. In diesem Fall können wir folgendes tun:

var exists = false; 
for(var i = 0, opts = document.getElementById('select-box').options; i < opts.length; ++i) 
    if(opts[i].value === 'bar') 
    { 
     exists = true; 
     break; 
    } 
+8

Die explizite zweite Ansatz ist auch sicherer, da es Optionswerte enthält alle Zeichen, einschließlich ']' und '' \\ erlaubt. Vermeiden Sie den Aufbau von Selektor-Strings aus unformatiertem Text, ohne dass CSS-Entweichen ausgeführt wird. – bobince

+8

Warum der 'Return false'? –

+13

Return false wird verwendet, um die Schleife zu unterbrechen/zu beenden. – Angel

14

Gerade falls Sie (oder jemand anderes) in ohne jQuery daran interessiert sein könnte. In meinem Fall überprüfe ich Werte in einem anderen Feld, während ich eine Auswahlliste erstelle. Ich hielt in undefinierte Werte laufen, wenn ich vergleichen würde, so dass ich meinen Scheck auf diese Weise:

if ($("#select-box option[value='" + thevalue + "']").val() === undefined) { //do stuff } 

Ich habe keine Ahnung, ob dieser Ansatz teurer ist.

8

Hier ist eine weitere ähnliche Option:

var exists = false; 
$('#select-box option').each(function(){ 
    if (this.value == 'bar') { 
     exists = true; 
     return false; 
    } 
}); 
4

Warum nicht einen Filter verwenden?

var thevalue = 'foo';  
var exists = $('#select-box option').filter(function(){ return $(this).val() == thevalue; }).length; 

lose Vergleiche arbeiten, weil> 0 gibt wahr ist, existiert == 0 falsch ist, so kann man einfach

if(exists){ 
    // it is in the dropdown 
} 

verwenden oder kombinieren:

if($('#select-box option').filter(function(){ return $(this).val() == thevalue; }).length){ 
    // found 
} 

Oder wo jeder Select Dropdown hat die select-boxes-Klasse, die Ihnen ein jquery-Objekt der Select (s) gibt, die den folgenden Wert enthalten:

var matched = $('.select-boxes option').filter(function(){ return $(this).val() == thevalue; }).parent(); 
+0

Dies ist imho der intuitivste Weg. – Simon

1

if(!$('#select-box').find("option:contains('" + thevalue + "')").length){ 
 
//do stuff 
 
}