Jquery checkbox checked
Имеем следующую разметку, сгруппированные инпуты по филдсету.
В этом примере одна группа, но на самом деле таких групп гораздо больше. <fieldset class="standart"> <legend><label><input id="checkboxall1" type="checkbox" value="yes" name="catid1[1]">Вся Москва</label></legend> <label><input class="checkboxall1" type="checkbox" value="yes" name="catid1[8]">ЮЗАО</label> <label><input class="checkboxall1" type="checkbox" value="yes" name="catid1[3]">САО</label> <label><input class="checkboxall1" type="checkbox" value="yes" name="catid1[4]">СВАО</label> <label><input class="checkboxall1" type="checkbox" value="yes" name="catid1[5]">ВАО</label> <label><input class="checkboxall1" type="checkbox" value="yes" name="catid1[6]">ЮВАО</label> </fieldset> и скрипт $(document).ready(function(){ $("[class^=checkboxall]").click(function(){ var idp = $(this).attr('class'); $("." + idp).closest('fieldset').find('input:checkbox:checked').length > 0 ? $("#" + idp).attr('checked','checked') : $("#" + idp).removeAttr('checked','checked'); }); }); Идея в том чтобы снимать/устанавливать чекбокс в легенде филдсета в зависимости есть ли хотябы один установленный чекбокс внутри этой группы. Пример упрощен, но и в этом случае не получается следующая вещь. При клике внутри группы чекбокс в легенде устанавливается, а при снятии всех чекбоксов группы, в легенде без изменений(тобиш в установленном состоянии). Если кто может подсказать в чем моя ошибка, буду очень признателен! |
надо не удалять, а ставить в false значение 'checked'
|
Цитата:
$("#" + idp).attr('checked','checked') : $("#" + idp).attr('checked',false); самое интересное что как тест вывожу из условия алерты alert(1) : alert(2); все указывает на верность логики, но как только алерты заменяю на вышеуказанный код и всёё не снимается чекбокс из легенды! |
не, логика неверная. У вас при убирании последнего чекбокса один-то активным остается-сам легенд. Вы просто код не убирайте, а дополните алертами.
|
Цитата:
$("." + idp).closest('fieldset').find('input:checkbox:checked').length > 0я обращаюсь к инпутам по классу а в легенде у него не класс а id |
$(document).ready(function(){ $("[class^=checkboxall]").click(function(){ var idp = $(this).attr('class'); if( $("." + idp).closest('fieldset').find('input:checkbox:checked').length > 0 ){ $("#" + idp).attr('checked','checked'); alert('check');}else {$("#" + idp).removeAttr('checked','checked'); alert('uncheck');} alert($("." + idp).closest('fieldset').find('input:checkbox:checked').length); }); }); Вот первый же клик по чекбоксу выводит нам длину=2. О чем это нам говорит? |
дополнил код алертами, показывает что код переключается но снятия флажка не происходит!
|
Код с alert('uncheck'); не выполняется.
|
а понял! да вы правы логика не верная!
в условии с кодом я ставил чекбокс в легенду поэтому и не срабатывал код со снятием галки а когда вместо кода я ставил алерт 1 и 2 там не было чекеда для легенды по этому второй срабатывал. Значит задача переработать логику, чтобы считались только инпуты из группы без инпута легенды! |
да. по поводу предыдущего- 'checked' =false|true только бывает. Удаляя атрибут, вы ставите дефолт. если у вас в коде по дефолту у чекбока будет выделение, то код не будет работать.
defaultChecked=true логику сломает. |
Часовой пояс GMT +3, время: 06:25. |