2013-03-07 2 views
23

У меня возникла проблема с поиском следующих действий jquery/checkbox.jquery attr ('checked', 'checked') работает только один раз

$(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 работает все время.

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

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

+5

использование '.prop ('проверено', правда) и .prop ('проверено', ложь)' вместо '.attr ('проверено', 'проверено') или .removeAttr'. attr для управления проверкой/выбранными состояниями теперь устарел в jQuery – codefreak

+1

, спасибо, теперь, когда вы упоминаете об этом, проблема началась после обновления jquery lib. Большое спасибо, не знал! – PiWo

ответ

69

Используйте опору («проверено», истина/ложь) вместо removeAttr

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

использовать .prop вместо .attr – codefreak

+2

тоже спасли мне головную боль :) – NDJ

+0

это было полезно и для меня. Благодарю. У меня есть запрос. В чем разница между prop и attr? разве они оба не выполняют одну и ту же работу? –

0

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

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

Смежные вопросы