Javascript jquery的问题';选择';可变变化

Javascript jquery的问题';选择';可变变化,javascript,jquery,Javascript,Jquery,我有这个: $('select').change(function (evt) { checkSelectAllOthers($(this).attr('id'), optionValues); optionValues = $('option:selected', this).map(function () { return this.value; }).get(); }).trigger('change'); function checkSelectA

我有这个:

$('select').change(function (evt) {
    checkSelectAllOthers($(this).attr('id'), optionValues);
    optionValues = $('option:selected', this).map(function () {
        return this.value;
    }).get();
}).trigger('change');
function checkSelectAllOthers(select, optionValues) {
    if ($("#" + select + " option").length == 1) {
        return;
    }
    var allValue = 'All';
    var allOption = $("#" + select + " option:not([value])");
    var otherOptions = $("#" + select).find("option[value!='0']", " option:not([value])");
    var newOptionValues = $('option:selected', $("#" + select)).map(function () {
        return this.value;
    }).get();
    if ($.inArray(allValue, optionValues) != $.inArray(allValue, newOptionValues)) {
        //The 'All' option is clicked
        if ($(allOption).is(":checked")) {
            $(otherOptions).each(function () {
                $(this).attr('selected', true);
            });
            $("#" + select).multiselect({
                selectedList: 1100
            });
            $("#" + select).multiselect('refresh');
        } else {
            $(otherOptions).each(function () {
                $(this).attr('selected', false);
            });
            $("#" + select).multiselect({
                selectedList: 1000
            });
            $("#" + select).multiselect('refresh');
        }
    } else {
        var selectSize = $("#" + select + " option").length;
        if (optionValues.length == selectSize && newOptionValues.length == selectSize - 1) {
            //deselect 'All'
            $(allOption).attr('selected', false);
            $("#" + select).multiselect({
                selectedList: 1000
            });
            $("#" + select).multiselect('refresh');
        } else if (newOptionValues.length == selectSize - 1) {
            //all other options are selected so set 'All' as selected
            $(allOption).attr('selected', true);
            $("#" + select).multiselect({
                selectedList: 1100
            });
            $("#" + select).multiselect('refresh');
        }
    }
}
上面的代码获取页面中的所有选择,如果选中“全部”复选框,它将选中所有复选框

它可以工作,但当“select”变量为null或未定义时,开发人员工具中的控制台中出现错误,该错误为:

未捕获的语法错误,无法识别的表达式:#jquery.js:869 jquery.extend._Deferred.Deferred.resolveWithjquery.js:420 jquery.extend.readyjquery.js:1055 DOMContentLoaded

在出现上述错误后,所有js代码都停止运行


我可以检查一下“选择”是否为空或未定义吗?

请发布您的
checkSelectAllOthers
功能代码。此外,
.trigger('change')
可能会导致循环。@DrKey我发布了该函数。我删除了。触发器(‘更改’)它修复了问题。谢谢你能创建一个JSFIDLE吗?@DrKey否,触发页面加载的更改不会导致循环。在创建事件处理程序后立即触发事件处理程序是常见的做法页面中的所有select元素都有ID吗?如果id不存在,则不要调用
选中SelectAllochers
。另外,在将值赋给函数的一个参数之前,您正在调用该函数
optionValues
。秩序是错误的