javascript - jQuery MultiSelect 库使用不正确的方法来处理 "Select All"?

标签 javascript jquery multi-select

我正在尝试更新一个使用 an extended version of Cory S.N. LaViska's jQuery.multiSelect plugin 的大型 Web 应用程序.

我更新到最新的代码,它解决了我遇到的问题。但是,它引入了一个新问题:选中“全选”选项现在会取消选中所有内容,而不是选中它。

我在 JavaScript 方面并不是非常先进,但已将问题隔离到以下代码:

currentMultiSelect.next('.multiSelectOptions').find('INPUT.selectAll').click(function () {
    if ($(this).attr('checked') == true)
        $(this).parent().parent().find('INPUT:checkbox').attr('checked', true).parent().addClass('checked');
    else
        $(this).parent().parent().find('INPUT:checkbox').attr('checked', false).parent().removeClass('checked');
});

问题是 $(this).attr('checked') 返回“checked”。因此 $(this).attr('checked') == true 将始终为 false。并且代码从未检测到该选项实际上已被选中!

好的,我明白这个问题了。但为什么会这样写,解决这个问题最可靠的方法是什么?我很想知道 JavaScript/jQuery 专家将如何解决这个问题。

最佳答案

checked 是一个属性,当 bool 属性如 disabledchecked 时,您应该使用 prop 方法设置为一个元素,该值被映射到该元素的相关 DOM 属性(浏览器执行此操作),从 jQuery 1.6 开始,要修改属性,prop 方法应该是用于代替 attr

所以你的代码应该是这样的

currentMultiSelect.next('.multiSelectOptions').find('INPUT.selectAll').click(function () {
    if ($(this).is(':checked'))
        $(this).parent().parent().find('INPUT:checkbox').prop('checked', true).parent().addClass('checked');
    else
        $(this).parent().parent().find('INPUT:checkbox').prop('checked', false).parent().removeClass('checked');
});

如果您使用 .is(":checked") 来检查复选框是否被选中,效果会更好。但使用 prop 设置复选框的 checked 属性

关于javascript - jQuery MultiSelect 库使用不正确的方法来处理 "Select All"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20891862/

相关文章:

Jquery 1.6.2 使 IE8 选项卡崩溃

javascript - 调用按键 :Value pair in Google Apps Script is returning "Undefined" instead of the value

javascript - React 只理解随机键?

javascript - 如何在 Accordion 中切换类 "active"

JQuery:如何将多行从一个表拖动到另一个表?

php - 如何访问在 PHP 中的多选下拉列表中选择的值?

Angular 5 - 多选而不按Ctrl键

javascript - 单击外部事件 div 以停用功能

javascript - 使用生成的数字为对象的左侧位置设置动画

c# - 404 未找到 Ajax jquery MVC