如果选择“全部”选项,则无法取消选择多选的所有选项

时间:2015-05-29 10:46:07

标签: javascript jquery multi-select

Example Fiddle

我遇到了这个问题(下拉菜单是使用选择的插件)

我正在调用jquery函数。问题是,有一个多选项,第一个选项是“全部”,所有其他选项都存在

当选择“全部”时,将取消选择所有其他选项。

这是我的多选:

    <select id="risk_mitigator_offer_1" name="risk_mitigator_offer_1[]" 
       class="input_field criteria_risk" style="width:302px;" 
       multiple onchange="checkAll(this)">
       <option value="All">All</option>
       <?php
       $offers_off = array();
       $_sql_off = mysql_query( 'SELECT * FROM mt_offers WHERE camp_id=' . $mysql['camp_id'] . ' AND deleted = "0" ORDER BY offer_id' );
       if ($_sql_off) 
       {
         while ($_data_off = mysql_fetch_assoc( $_sql_off )) 
         {?>
            <option value="<?php echo $_data_off['offer_id']?>"><?php echo $_data_off['offer_name'];?></option>
   <?php  }
       } ?>  
    </select>

这里是jquery函数:

function checkAll(obj)
{
    var values = $(obj).val();
    if (values) 
    {
        for (var i = 0; i < values.length; i++) 
        {
            if(values[i] == "All")
            {
                $(obj+" option[value!=All]").removeAttr("selected");
            }
        }
    }
}

现在的问题是,我收到以下jquery错误:

Error: Syntax error, unrecognized expression: [object HTMLSelectElement] option[value!=All]


throw new Error( "Syntax error, unrecognized expression: " + msg );

如何解决此问题?

我知道这可能是一个愚蠢的问题,问题在于这行代码:

$(obj+" option[value!=All]").removeAttr("selected");

1 个答案:

答案 0 :(得分:1)

问题是obj是一个HTMLSelectElement对象,所以你不能像你想要的那样通过连接字符串来构造CSS选择器。而是过滤除“全部”之外的所有选项,并使用prop方法取消选择它们:

function checkAll(obj) {
    var values = $(obj).val();
    if (values) {
        $(obj).find('option').filter(function() {
            return this.value !== 'All';
        }).prop('selected', false);
    }
}