2010-02-12 12 views

Odpowiedz

158

Użyj Attribute Equals Selector

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

Jeśli wartość dana opcja została ustawiona przez JavaScript, które nie będą działać. W tym przypadku możemy wykonać następujące czynności:

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

Wyraźna Drugie podejście jest również bezpieczniejszy, ponieważ pozwala wartości opcji zawierające dowolny znak, w tym '' i '] \\'. Unikaj budowania ciągów selektora z nieprzetworzonego tekstu bez wykonywania właściwego przechodzenia CSS. – bobince

+8

Dlaczego 'return false'? –

+13

Powrót false służy do przerwania/zakończenia pętli .each. – Angel

14

Na wszelki wypadek można (lub ktoś inny) będzie zainteresowany robi to bez 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

Oto kolejna podobna opcja. W moim przypadku sprawdzam wartości w innym polu, ponieważ buduję listę wyboru. I biegł do wartości nieokreślone gdy Chciałbym porównać, więc mogę ustawić mój sprawdzić w ten sposób:

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

nie mam pojęcia, czy takie podejście jest bardziej kosztowne.

4

Dlaczego nie użyć filtra?

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

Luźne porównania pracy, ponieważ istnieje> 0 jest prawdziwa, istnieje == 0 jest fałszywe, więc można po prostu użyć

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

lub połączyć go:

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

albo gdzie każdy lista rozwijana select ma klasę select-boxes, dzięki czemu otrzymasz obiekt jquery z zaznaczonymi elementami, który zawiera wartość:

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

To jest najbardziej intuicyjny sposób. – Simon

1

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

Powiązane problemy