Comment puis-je, en utilisant JQuery, vérifier si une valeur appartient à la liste déroulante ou non?
Utilisez le Attribute Equals Selector
var thevalue = 'foo';
var exists = 0 != $('#select-box option[value='+thevalue+']').length;
Si la valeur de l'option a été définie via Javascript, cela ne fonctionnera pas. Dans ce cas, nous pouvons faire ce qui suit:
var exists = false;
$('#select-box option').each(function(){
if (this.value == 'bar') {
exists = true;
return false;
}
});
Juste au cas où vous (ou quelqu'un d'autre) pourriez être intéressé à le faire sans 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;
}
Voici une autre option similaire. Dans mon cas, je vérifie les valeurs dans une autre case lorsque je crée une liste de sélection. Je continuais à courir dans des valeurs indéfinies quand je comparais, alors je règle mon contrôle de la façon suivante:
if ( $("#select-box option[value='" + thevalue + "']").val() === undefined) { //do stuff }
Je n'ai aucune idée si cette approche est plus chère.
Pourquoi ne pas utiliser un filtre?
var thevalue = 'foo';
var exists = $('#select-box option').filter(function(){ return $(this).val() == thevalue; }).length;
Les comparaisons lâches fonctionnent parce qu'existe> 0 est vrai, existe == 0 est faux, vous pouvez donc simplement utiliser
if(exists){
// it is in the dropdown
}
Ou le combiner:
if($('#select-box option').filter(function(){ return $(this).val() == thevalue; }).length){
// found
}
Ou, chaque menu déroulant de sélection ayant la classe select-boxes, cela vous donnera un objet jQuery du ou des sélections contenant la valeur:
var matched = $('.select-boxes option').filter(function(){ return $(this).val() == thevalue; }).parent();
if(!$('#select-box').find("option:contains('" + thevalue + "')").length){
//do stuff
}
Je sais que c'est un peu une vieille question, celle-ci fonctionne mieux.
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);
}
Comme vous pouvez le voir dans cet exemple, je recherche par nom de liste déroulante de données de balises uniques et la valeur de l'option sélectionnée. Bien sûr, vous n'en avez pas besoin pour que cela fonctionne, mais je les ai incluses afin que d'autres personnes puissent voir que vous pouvez rechercher des valeurs multiples, etc.