jquery attr('checked','checked')只能运行一次

我有一个问题find下面的jquery / checkbox行为的原因。

$( 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被选中:添加属性检查标记为.select内的所有checkboxtable.sgrid内容 – 如果没有:删除'检查'来自所有input.select项目的属性。

又一个简单的网格function。 它工作。 奇怪的部分是,它只能工作一次。 我的意思是,你可以select所有的checkbox并取消select它们。 之后,“全选”function停止工作。

另一个奇怪的是,当我用萤火虫检查dom元素时,他们都被视为应该被检查='检查'attr,但是他们显示和行为,因为他们没有被检查。

select器按照应有的方式工作。 添加/删除ui-state-highlight的代码部分始终工作。

完美的词: grid – 是我传递给grid.obj的对象(基本上是ceratain div的ID)

请给我你的意见。

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

 $('input[name=foo]').prop('checked', true); $('input[name=foo]').prop('checked', false); 

你可以改变这个属性,如果这个元素是不变的,那么这个属性也会改变。 一旦元素离开这个初始状态,改变属性不再影响属性。 浏览器之间的确切行为可能会有所不同。

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