Простая функциональность, я хочу включить / отключить флажки, основанные на изменении флажка верхнего уровня.
Проблема в том, что у обработчиков событий Toggle / Click есть присущие проблемы. Если вы попытаетесь привязать эти обработчики к флажку ввода, проверка флажка по умолчанию не будет выполнена.
Итак, я попытался использовать обработчик изменений одним из двух способов.
$('input.all_neighborhoods').change(function(){
if($(this).not(':checked')){
$(this).closest('li').siblings('li').find('input[name=neighborhood_id]').attr('checked','checked');
}
else{
$(this).closest('li').siblings('li').find('input[name=neighborhood_id]').removeAttr('checked');
}
});
Здесь первое изменение работает так, как вы ожидаете. Все родственные флажки выбраны и проверены. Однако, когда я нажимаю снова, чтобы снять флажок, ничего не происходит. Обработчик событий не работает.
Я тогда попробовал это:
$('input.all_neighborhoods').change(function(){
$(this).attr( 'checked', $(this).is( ':checked' ) ? $(this).closest('li').siblings('li').find('input[name=neighborhood_id]').attr('checked','checked'): $(this).removeAttr('checked').closest('li').siblings('li').find('input[name=neighborhood_id]').removeAttr('checked') );
});
Здесь чекбоксы родного элемента эффективно переключаются. Тем не менее, главный переключатель включения / выключения остается установленным.
Связана ли эта проблема с тем фактом, что все они являются братьями и сестрами, а основной флажок не является родительским?