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

时间:2013-03-07 08:40:04

标签: javascript jquery checkbox checked

我在查找以下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:将选中的属性添加到table.sgrid-content中标记为.select的所有复选框   - 如果不是:从所有input.select项中删除'checked'属性。

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

另一个奇怪的事情是,当我用萤火虫检查dom元素时,它们都应该被检查='检查'attr,但它们显示并表现为未检查。

选择器可以正常工作。添加/删除 ui-state-highlight 的代码部分始终有效。

言论之词: grid - 是我传递给grid.obj的对象(基本上是一个ceratain div的ID)

请告诉我你的意见。

2 个答案:

答案 0 :(得分:73)

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

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

答案 1 :(得分:1)

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

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