Jquery attr ('checked', '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: добавьте атрибут, отмеченный всеми флажками, помеченными как .select в table.sgrid-content  - если нет: удалите атрибут 'checked' из всех элементов input.select.

Еще одна простая функция сетки. И это работает. Странная часть, она работает только один раз. Под этим я подразумеваю, вы можете выбрать все флажки и отменить их выбор. После этого функция "Выбрать все" перестает работать.

Еще одна странность в том, что когда я проверяю элементы dom с firebug, все они становятся checked = 'checked' attr, как они должны, но они отображают и ведут себя так, как они не были проверены.

Селекторы работают так, как должны. Часть кода с добавлением/удалением ui-state-highlight работает все время.

Слово объяснения: grid - это объект, который я передаю для получения grid.obj(в основном идентификатор ceratain div)

Пожалуйста, дайте мне свое мнение.

Ответ 1

Используйте prop ('checked', true/false) вместо removeAttr

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

Ответ 2

Вы можете изменить атрибут, и это также изменит свойство, если элемент не затронут. Когда элемент покидает это начальное состояние, изменение атрибута больше не влияет на свойство. Точное поведение, вероятно, меняется между браузерами.

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