Jak mogę, używając JQuery, sprawdzić, czy wartość należy do listy rozwijanej, czy nie?
Jak mogę, używając JQuery, sprawdzić, czy wartość należy do listy rozwijanej, czy nie?
Odpowiedzi:
Użyj selektora Atrybut równa się
var thevalue = 'foo';
var exists = 0 != $('#select-box option[value='+thevalue+']').length;
Jeśli wartość opcji została ustawiona za pomocą JavaScript, to nie zadziała. W takim 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;
}
});
return false
?
Na wypadek gdybyś (lub ktoś inny) był zainteresowany zrobieniem tego 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;
}
Oto kolejna podobna opcja. W moim przypadku sprawdzam wartości w innym polu podczas tworzenia listy wyboru. Ciągle napotykałem niezdefiniowane wartości, gdy porównywałem, więc ustawiłem swój test w ten sposób:
if ( $("#select-box option[value='" + thevalue + "']").val() === undefined) { //do stuff }
Nie mam pojęcia, czy takie podejście jest droższe.
Dlaczego nie użyć filtra?
var thevalue = 'foo';
var exists = $('#select-box option').filter(function(){ return $(this).val() == thevalue; }).length;
Luźne porównania działają, ponieważ istnieje> 0 jest prawdą, istnieje == 0 jest fałszem, więc możesz po prostu użyć
if(exists){
// it is in the dropdown
}
Lub połącz to:
if($('#select-box option').filter(function(){ return $(this).val() == thevalue; }).length){
// found
}
Lub jeśli każde menu wybierz zawiera klasę select-boxes, to da ci obiekt jquery z zaznaczeniami, które zawierają wartość:
var matched = $('.select-boxes option').filter(function(){ return $(this).val() == thevalue; }).parent();
if(!$('#select-box').find("option:contains('" + thevalue + "')").length){
//do stuff
}
theValue
tylko option_number
lista rozwijana. Twoje rozwiązanie jest złe.
Wiem, że to stare pytanie, ale to działa lepiej.
if(!$('.dropdownName[data-dropdown="' + data["item"][i]["name"] + '"] option[value="'+data['item'][i]['id']+'"]')[0]){
//Doesn't exist, so it isn't a repeat value being added. Go ahead and append.
$('.dropdownName[data-dropdown="' + data["item"][i]["name"] + '"]').append(option);
}
Jak widać w tym przykładzie, szukam według unikatowych nazw tagów rozwijanych z danymi i wartości wybranej opcji. Oczywiście nie potrzebujesz ich, aby działały, ale dołączyłem je, aby inni mogli zobaczyć, że możesz wyszukiwać wiele wartości itp.
]
i `\ '. Unikaj budowania ciągów selektorów z surowego tekstu bez wykonywania odpowiednich znaków ucieczki CSS.