2010-02-12 9 views

Respuesta

158

Uso del Attribute Equals Selector

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

Si el valor de la opción se establece a través de Javascript, que no va a funcionar. En este caso, podemos hacer lo siguiente:

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

El segundo enfoque explícito es también más seguro, ya que permite valores de las opciones que contienen cualquier carácter, incluyendo '] 'y' '\\. Evite crear cadenas de selector a partir de texto en bruto sin hacer un escape de CSS adecuado. – bobince

+8

¿Por qué el 'return false'? –

+13

Devolver falso se utiliza para romper/finalizar cada ciclo. – Angel

14

En caso de que (u otra persona) podría estar interesado en hacerlo sin jQuery:

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

Aquí es otra opción similar. En mi caso, estoy verificando valores en otro cuadro a medida que construyo una lista de selección. Seguí corriendo en valores indefinidos cuando se compararía, así que me puse mi cheque de esta manera:

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

tengo ni idea de si este enfoque es más caro.

4

¿Por qué no utilizar un filtro?

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

comparaciones sueltas funcionan porque existe> 0 es cierto, existe == 0 es falso, por lo que sólo se pueden utilizar

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

O combinarlo:

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

o cuando cada El menú desplegable de selección tiene la clase select-boxes esto le dará un objeto jquery de la selección (es) que contiene el valor:

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

Esta es la forma más intuitiva. – Simon

1

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

Cuestiones relacionadas