web-dev-qa-db-fra.com

Vérifier si la valeur est dans la liste de sélection avec JQuery

Comment puis-je, en utilisant JQuery, vérifier si une valeur appartient à la liste déroulante ou non?

106
user271507

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;
    }
});
168
Lachlan Roche

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;
   }
15
Marco Demaio

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.

9
cam_pdx

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();
5
keV
if(!$('#select-box').find("option:contains('" + thevalue  + "')").length){
//do stuff
}
2
elaine

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.

0
PhanFree