2013-06-24 2 views
5

Мне нужна помощь с автоматической проверкой флажков в treeview.jQuery не будет проверять флажки

У меня есть дерево, когда я нажимаю флажок, все дочерние элементы в списке будут автоматически отмечены флажками. Проблема в том, что это не сработает.

treeview.find('input[type=checkbox]').each(function() { 
    $j(this).click(function() { 
     if ($j(this).is(':checked')) { 
      $j(this).siblings('ul').find('input[type=checkbox]').attr('checked', 'checked'); 
     } else { 
      $j(this).siblings('ul').find('input[type=checkbox]').removeAttr('checked'); 
     } 
    }); 
}); 

Так что код говорит все, я нахожу все флажки, и на каждом я связываю событие click. Когда элемент щелкнут, он проверяет, проверен ли он, затем найдите все флажки и установите их атрибут для проверки, иначе найдите все флажки и удалите их проверенный атрибут. Мои селекторы работают нормально, так что это не проблема.

Когда я нажимаю на флажках, все флажки проверяются, и когда я снимаю галочку, он все еще работает. Но, по другой попытке, он больше не работает! Это очень странно! И самое странное, что когда я проверяю код, я могу видеть на флажке, что он имеет checked="checked", но браузер не будет отображать проверенное состояние (на самом деле это основная проблема).

+6

Попробуйте '.prop()' вместо '.attr()'. –

ответ

13

Использование:

$el.prop('checked', true) // to check the box 
$el.prop('checked', false) // to uncheck the box 

Вместо:

$el.attr('checked', 'checked') // to check the box 
$el.removeAttr('checked') // to uncheck the box 

Это потому, что вам нужно изменить проверенное состояние коробки, а не проверяемый атрибут. Проверенный атрибут предназначен только для исходного состояния флажка.

+1

уважение! tnx alot! – Adrian