Checkbox check/checkcheck jQuery

Каким образом можно установить/снять флажок, который помещается внутри элемента, который запускает мою функцию?

Здесь мой код:

<table id="news_list">
<tr>
    <td><input type="checkbox" name="news[1]" /></td>
    <td>TEXT</td>
</tr></table>

$("#news_list tr").click(function() {
    var ele = $(this).find('input');
    if(ele.is(':checked')){
        ele.removeAttr('checked');
        $(this).removeClass('admin_checked');
    }else{
        ele.attr('checked', 'checked');
        $(this).addClass('admin_checked');
    }
});

Проблема в том, что я могу проверять и снимать каждую ячейку только один раз. После того, как я проверил и снял флажок, он по-прежнему добавляет/удаляет класс, но никогда не проверяет поле снова (даже когда я нажимаю на флажок, а не на строку таблицы).

Я попытался использовать триггер .bind('click'), но это тот же результат.

Любые решения?

+30
08 февр. '13 в 9:28
источник поделиться
3 ответа

Используйте .prop() вместо этого, и если мы перейдем к вашему коду, сравните вот так:

Посмотрите на пример jsbin:

  $("#news_list tr").click(function () {
    var ele = $(this).find(':checkbox');
    if ($(':checked').length) {
      ele.prop('checked', false);
      $(this).removeClass('admin_checked');
    } else {
      ele.prop('checked', true);
      $(this).addClass('admin_checked');
    }
 });

Изменения:

  • Изменен input на :checkbox.
  • Сравнение the length checked checkboxes.
+42
08 февр. '13 в 10:03
источник

Используйте prop() вместо attr(), чтобы установить значение checked. Также используйте :checkbox в методе поиска вместо input и будьте конкретными.

Live Demo

$("#news_list tr").click(function() {
    var ele = $(this).find('input');
    if(ele.is(':checked')){
        ele.prop('checked', false);
        $(this).removeClass('admin_checked');
    }else{
        ele.prop('checked', true);
        $(this).addClass('admin_checked');
    }
});

Используйте prop вместо attr для таких свойств, как checked

Как и в jQuery 1.6, метод .attr() возвращает undefined для атрибутов которые не были установлены. Извлечение и изменение свойств DOM, таких как проверенное, выбранное или отключенное состояние элементов формы, используйте .prop() метод

+19
08 февр. '13 в 9:30
источник
 $('mainCheckBox').click(function(){
    if($(this).prop('checked')){
        $('theControledCheckBoxes').prop('checked', true);
    }else{
        $('theControledCheckBoxes').prop('checked', false);
    }
});
+5
16 июл. '13 в 2:14
источник

Посмотрите другие вопросы по меткам или Задайте вопрос