Vérifiez 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?

Utiliser le sélecteur d’égalité des atsortingbuts

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 boîte lorsque je construis une liste de sélection. J’ai continué à courir dans des valeurs indéfinies lorsque je comparais, alors j’ai réglé ma vérification comme suit:

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

Je ne sais pas 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 car existe> 0 est vrai, existe == 0 est faux, donc vous pouvez simplement utiliser

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

Ou combinez-le:

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

Ou lorsque chaque liste déroulante de sélection a la classe select-boxes, cela vous donnera un object jquery du ou des select qui contiennent la valeur:

 var matched = $('.select-boxes option').filter(function(){ return $(this).val() == thevalue; }).parent(); 
 if(!$('#select-box').find("option:contains('" + thevalue + "')").length){ //do stuff }