用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 }