jquery attr('checked','checked') 只工作一次

IT技术 javascript jquery checkbox checked
2021-01-16 09:55:43

我在寻找以下 jquery/复选框行为的原因时遇到问题。

$( this.obj + ' table.sgrid-content > thead > tr > th > input.select_all' ).on( 'click' , {grid:this} , function(event){

var grid = event.data.grid;

if( $(this).is(':checked') ){

    $( grid.obj + ' table.sgrid-content > tbody > tr > td > input.select ' ).attr('checked','checked');
    $( grid.obj + ' .sgrid-content > tbody > tr > td > input.select ' ).parents('tr').addClass('ui-state-highlight');

} else {

    $( grid.obj + ' table.sgrid-content > tbody > tr > td > input.select ' ).removeAttr('checked');
    $( grid.obj + ' table.sgrid-content > tbody > tr > td > input.select ' ).parents('tr').removeClass('ui-state-highlight');

}

});

该代码旨在按如下方式工作: - 单击 input.select_all 触发事件 - 如果选中 input.select_all:将选中的属性添加到 table.sgrid-content 中标记为 .select 的所有复选框 - 如果不是:删除“已选中” ' 来自所有 input.select 项目的属性。

另一个简单的网格函数。它有效。奇怪的是,它只工作一次。我的意思是,您可以选择所有复选框并取消选择它们。在该操作之后,“全选”功能停止工作。

另一个奇怪的事情是,当我用 firebug 检查 dom 元素时,它们都按照应有的方式变成了已检查的 = 已检查的属性,但它们的显示和行为与未检查的一样。

选择器按其应有的方式工作。添加/删除ui-state-highlight的代码部分一直有效。

说明词: grid - 是我传递给 grid.obj 的对象(基本上是某个 div 的 ID)

请给我你的意见。

2个回答

使用prop('checked', true / false)而不是 removeAttr

$('input[name=foo]').prop('checked', true);
$('input[name=foo]').prop('checked', false);
使用 .prop 而不是 .attr
2021-03-26 09:55:43
也让我头疼:)
2021-03-30 09:55:43
这对我也很有用。谢谢。我也有疑问。prop 和 attr 和有什么不一样?他们不是都做同样的工作吗?
2021-04-11 09:55:43

您可以更改属性,如果元素未受影响,这也会更改属性。一旦元素离开这个初始状态,改变属性就不再影响属性。确切的行为可能因浏览器而异。

Instead of .attr('checked', 'cheked') use .prop('checked', true)