Jquery флажок переключение не работает

0

На моей странице html я хочу динамически вставлять флажки, и я хочу иметь 1 мастер-флажок сверху, поэтому, если этот флажок установлен, тогда все динамически созданные становятся проверенными, а если он не отмечен, то все динамически неконтролируемые. У меня есть этот код:

<script type="text/javascript">
    $(function() {
        $("#selectAll").click(function() {
            var checked = $(this).prop('checked');
            $(".profilebox").attr("checked", checked);
        });
    });
</script> 

мастер-флажок

<input id="selectAll" type="checkbox" name="selectall" value="All">

другие флажки: (вставляется в цикл с использованием этого php-кода)

<input type='checkbox' class='profilebox' name='select' value='{$member_id}'>

Однако он работает неправильно. Если я нажму на главный, тогда все они будут проверены. Если я снова нажму на него, то все не будут проверены, а затем, если я снова нажму на него, все они все равно не будут проверены.

Кто-нибудь знает проблему?

благодаря

Теги:
checkbox

3 ответа

6
Лучший ответ

Используйте prop вместо attr, свойство свойства элемента гарантированно работает, чем атрибут атрибута элемента. Старая версия jquery, которая не имела опоры, attr, используемая для выполнения работы обоих, была введена позже, и для настройки свойств, подобных этой опоре, наилучшим образом.

$(function() {
        $("#selectAll").click(function() {
            $(".profilebox").prop("checked", this.checked);
        });
    });
  • 1
    это работает хорошо, спасибо.
  • 1
    @ милега, пожалуйста.
1

Использовать .prop()

$(".profilebox").prop("checked", this.checked);

теперь ваш код становится

$(function () {
    $("#selectAll").click(function () {
        $(".profilebox").prop("checked", this.checked);
    });
});

$ (elem).prop("checked") true (Boolean) Будет изменен с использованием флажка

$ (elem).attr("checked") (1.6) "checked" (String) Начальное состояние флажка; не изменяется $ (elem).attr("checked")

(1.6. 1+) "checked" (String) Будет изменен с состоянием флажка

$ (elem).attr("checked") (pre-1.6) true (Boolean) Изменено с состоянием флажка

1

необходимо использовать .prop(), чтобы установить свойство checked вместо .attr()

$(".profilebox").prop("checked", this.checked);

Пример:

$(function () {
    //cache the selector result
    var $profileboxes = $(".profilebox");
    $("#selectAll").click(function () {
        $profileboxes.attr("checked", this.checked);
    });
});

Читать: Атрибуты и свойства

Ещё вопросы

Сообщество Overcoder
Наверх
Меню