0

我在最左边的列中有一个带有复选框的表格。当每行的复选框被选中时,该行会改变颜色以反映这一点。在表头中,还有一个“全选”复选框。

JSFiddle 代码在这里

// 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

1 回答 1

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/

于 2013-10-29T17:09:30.523 回答