Bootstrap 多选插件无法取消选中所有元素

Bootstrap Multiselect plugin fails to uncheck all elements

我正在使用 Bootstrap Multiselect plugin 作为我的 select 选项元素。当用户 select 来自一个 select 选项元素的一个(或所有选项)时,需要取消选中来自其他 select 选项元素的所有元素。我检查了解决方案的文档,当我在文档中使用代码时出现错误:

bootstrap-multiselect.js:1042 (Uncaught TypeError: undefined is not a function)

有人知道问题出在哪里吗?

这是我的代码:

 $('#select1').multiselect({
        includeSelectAllOption: true,
        enableFiltering: true,
        onChange: function(element, checked) {
            //alert ("OK");//Alerts pop ups
            $('#select2').multiselect('deselectAll', false);
            $('#select2').multiselect('updateButtonText')

        }
    });

我试图通过删除 jQuery 和 bootstrap 来重现您的问题。因为所有 bootstrap 真正做的是样式,你可以在没有它的情况下使用插件(它看起来真的很糟糕)并且它不会抛出任何错误。

删除 jQuery 将抛出以下错误:

Uncaught TypeError: Cannot read property 'fn' of undefined
index.js:1 Uncaught ReferenceError: $ is not defined

我查看了最新版本的 bootstrap-multiselect.js 并且 1402 行是空白的,所以我不知道该错误来自何处。

第 1401 行是:

}(window.jQuery);

我猜你使用的是旧版本的插件,尽管这可能不是导致问题的原因。尝试 updating the plugin 看看是否有任何效果。

请注意,我在 jQuery 2.1.3 上使用最新版本的 bootstrap-multiselect 在 Chrome v41 Mac OSX10.10

在旧版本的插件中,第 1042 行看起来像

+1041            if (typeof option === 'string') {
+1042                data[option](parameter);

并且选项 deselectAll 被命名为 deselectall,这将导致此行出错。如果您需要使用此版本的插件,只需将选项替换为 deselectall 即可正常使用。但我强烈建议您更新到最新版本。

FWIW,这个插件的第一个版本在GitHub已经有这个功能了deselectAll,所以这个版本真的很旧,我找不到它作为参考。但是我在工作场所遇到了同样的问题,我们以前使用的版本可能与 OP 相同。

+823    /**
+824     * Deselects all options.
+825     * If justVisible is true or not specified, only visible options are deselected.
+826     * 
+827     * @param {Boolean} justVisible
+828     */
+829     deselectall: function (justVisible) {
 ...