Задать вопрос
ruskar
@ruskar
Conflict Intelligence Team

JQuery — Программируемый вызов события click()?

Есть иерархический список категорий, представленный в виде ненумерованного списка UL-LI с чекбоксами. Такого вида:

<ul><br>
 <li><input type="checkbox" value="1" rel="c0" id="c1" class="category"/><label for="c1">Электроника</label></li><br>
 <ul><br>
  <li><input type="checkbox" value="2" rel="c1" id="c2" class="category"/><label for="c2">Телефоны</label></li><br>
  <ul><br>
   <li><input type="checkbox" value="3" rel="c2" id="c3" class="category"/><label for="c3">Сотовые телефоны</label></li><br>
  </ul><br>
 </ul><br>
</ul><br>




Задача такая, что при клике на третий чекбокс (сотовые телефоны) также должны автоматом «отметиться» и верхние две категории, поскольку они являются родительскими по отношению к нажатой.

Отслеживание нажатия и нажатие родительских категорий я выполняю следующим кодом на jQuery:

$(document).ready(function() {<br>
    $('.category').bind('click', function() {<br>
        var category_id = $(this).val();<br>
        var parent = $(this).attr('rel');<br>
     <br>
        if($(this).attr('checked')) {<br>
             window.categories.push = category_id;<br>
        }<br>
<br>
        if(parent != 'c0') $('#'+parent).click();<br>
    });    <br>
})<br>




Код работает прекрасно в том смысле, что он действительно ставит галочки и на родительских категориях. Но проблема в том, что при программном вызове события click() код $(this).attr('checked') почему-то возвращает false, тогда как отметка на самом деле производится; и наоборот, возвращает true, тогда как отметка на самом деле снимается.



Отчего так?
  • Вопрос задан
  • 16388 просмотров
Подписаться 5 Оценить Комментировать
Ответ пользователя Dreddik К ответам на вопрос (7)
Dreddik
@Dreddik
Не вызывайте клик, ставьте аттрибут $('#c2').attr('checked', true);
Ответ написан
Комментировать