用JQuery检查值是否在select列表中

我怎样才能使用JQuery来检查一个值是否属于下拉列表?

使用属性等于select器

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

如果该选项的值是通过Javascript设置的,那么这是行不通的。 在这种情况下,我们可以做到以下几点:

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

以防万一你(或其他人)可能有兴趣做没有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; } 

这是另一个类似的选项。 在我的情况下,我正在检查另一个框中的值,因为我build立一个select列表。 当我比较时,我一直遇到未定义的值,所以我设置我的支票这样:

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

我不知道这种方法是否更昂贵。

为什么不使用filter?

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

松散的比较工作,因为存在> 0是真实的,存在== 0是错误的,所以你可以使用

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

或者结合起来:

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

或者,每个select下拉列表中都有select-boxes类,这会给你一个select(s)的jquery对象,它包含这个值:

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