复选框onclick事件仅触发两次

时间:2013-10-29 17:02:11

标签: jquery checkbox

我在最左边的列中有一个带有复选框的表格。选中每行的复选框后,该行会更改颜色以反映此情况。在表格标题中,还有一个“全选”复选框。

JSFiddle Code Here

// Checks/unchecks all checkboxes ending with a particular ID string within a table
function SelectAllRows(SelectAllCheckBox, IdEndsWith) {
    var isChecked = $(SelectAllCheckBox).is(":checked");
    $(SelectAllCheckBox).closest('table').find("input[type='checkbox'][id*='" + IdEndsWith + "']").attr("checked", isChecked);
    HighlightRowsOnChecked(SelectAllCheckBox, IdEndsWith);
}

JQuery很小,但出于某种原因会出现以下逻辑:

  1. 选中标题复选框 - 选中表格中的所有复选框并将行着色
  2. 然后取消选中
  3. 标题复选框 - 取消选中所有复选框并清除行着色
  4. 选中标题复选框 - 无响应!
  5. 有人可以帮助完善这段代码来消除这种奇怪的行为吗?非常感谢。

    当我的脑袋旋转时,我们也会感激不尽的解释!

1 个答案:

答案 0 :(得分:2)

在这种情况下,您应该使用.prop()代替.attr()

$(SelectAllCheckBox).closest('table')
    .find("input[type='checkbox'][id*='" + IdEndsWith + "']")
    .prop("checked", isChecked);

属性与属性

在特定情况下,属性和属性之间的区别很重要。在jQuery 1.6之前,.attr()方法在检索某些属性时有时会考虑属性值,这可能会导致行为不一致。从jQuery 1.6开始,.prop()方法提供了一种显式检索属性值的方法,而.attr()检索属性。

参考:http://api.jquery.com/prop/

演示:http://jsfiddle.net/q9apt/3/