2013-06-24 14 views
5

Potrzebuję pomocy w automatycznym sprawdzaniu pól wyboru w widoku drzewa.jQuery nie będzie zaznaczać pól wyboru

Mam widok drzewa, po kliknięciu pola wyboru wszystkie elementy podrzędne na liście będą miały automatycznie zaznaczone pola wyboru. Problem polega na tym, że nie zadziała.

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'); 
     } 
    }); 
}); 

Tak więc kod mówi wszystko, znajduję wszystkie pola wyboru i na każdym zdarzeniu klikam wiążę. Po kliknięciu tego elementu sprawdza on, czy jest zaznaczone, a następnie znajduje wszystkie pola wyboru i ustawia ich atrybut jako zaznaczone, w przeciwnym razie znajdzie wszystkie pola wyboru i usunie ich zaznaczony atrybut. Moje selektory działają dobrze, więc nie stanowi to problemu.

Po kliknięciu pola wyboru wszystkie pola wyboru zostają zaznaczone, a po usunięciu zaznaczenia nadal działają. Ale przy innej próbie to już nie działa! To bardzo dziwne! A najdziwniejsze jest to, że kiedy sprawdzam kod, widzę na checkboxie, że ma on checked="checked", ale przeglądarka nie wyrenderuje stanu sprawdzonego (w rzeczywistości jest to główny problem).

+6

Spróbuj '.prop()' zamiast '.attr()'. –

Odpowiedz

13

Zastosowanie:

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

Zamiast:

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

To dlatego, że trzeba zmienić sprawdzenia stanu polu, a nie sprawdzone atrybutu. Atrybut sprawdzany jest tylko dla początkowego stanu pola wyboru.

+1

szacunek! wielkie dzięki! – Adrian

Powiązane problemy