Как обработать изменение флажка с помощью jQuery?

106

У меня есть код

<input type="checkbox" id="chk" value="value" />
<label for="chk">Value </label>
<br/>
<input type="button" id="But1" value="set value" />
<br />
<input type="button" id="But2" value="read checked" />

javascript:

$(document).ready(function () {
    console.log("Ready ...");
    registerHandlers();

    function registerHandlers() {
        $('#But1').click(function () {
            $('#chk').prop('checked', !$('#chk').is(':checked'));
        });
        $('#But2').click(function () {
            var chk1 = $('#chk').is(':checked');
            console.log("Value : " + chk1);
        });

        $('input[type="checkbox"]').change(function () {
            var name = $(this).val();
            var check = $(this).prop('checked');
            console.log("Change: " + name + " to " + check);
        });
    }
});

Как обработать изменение флажка с помощью jQuery? Мне нужно поставить обработчик, чтобы изменить все флажки.

[Обновить]

Есть флажок и несколько кнопок. Каждая кнопка может менять флажок. Как поймать событие, меняющее галочку?

[Обновить]

Мне нужен флажок изменения дескриптора в этом примере jsfiddle . Когда я нажимаю на поле, кнопка с сообщением «ОК» не отображается.

ЗАКОНОПРОЕКТ
источник
Я действительно не понимаю твою проблему? Что должно произойти при изменении флажка?
Niklas
В чем проблема? Этот код работает нормально
JaredPar
2
Не могли бы вы перефразировать свой вопрос? У вас уже есть обработчик $ ('input [type = "checkbox"]'). Change, что не так?
Madman
При изменении кнопки чекбокса события изменения не происходят
БИЛЛ
3
FYI; $('#chk').prop('checked')возвращает логическое значение, а не значение атрибута. См. Api.jquery.com/prop
Стефан,

Ответы:

163

Используйте :checkboxселектор:

$(':checkbox').change(function() {

        // do stuff here. It will fire on any checkbox change

}); 

Код: http://jsfiddle.net/s6fe9/

Самич
источник
75
... и this.checkedочень полезно, чтобы определить, установлен ли флажок или нет.
Стефан
1
Можно ли зарегистрировать несколько обработчиков?
БИЛЛ
1
Это все еще рекомендуется в 2015 году?
Eugen Sunic
2
Не похоже, что API был изменен, так что да.
Samich
это должно быть внутри $ (document) .ready (function () ... для меня, это правильно?
kaya
67

Вы также можете использовать идентификатор поля

$('#checkbox1').change(function() {
   if($(this).is(":checked")) {
      //'checked' event code
      return;
   }
   //'unchecked' event code
});
Пинеш Шарма
источник
17

Надеюсь, это поможет.

$('input[type=checkbox]').change(function () {
    if ($(this).prop("checked")) {
        //do the stuff that you would do when 'checked'

        return;
    }
    //Here do the stuff you want to do when 'unchecked'
});
Локеш Ядав
источник
6
начиная с jQuery 1.6, лучше использовать $ (this) .prop ("checked"), так как он будет динамически меняться в зависимости от фактического состояния флажка.
hrabinowitz
3
.attr ("отмечен") неверен, потому что он не обновляется при нажатии пользователем. Подтверждаю комментарий @hrabinowitz.
Адриан
7
$("input[type=checkbox]").on("change", function() { 

    if (this.checked) {

      //do your stuff

     }
});
Арджун
источник
1
Пожалуйста, проверьте, работает ли ваш собственный код перед публикацией. С вашими селекторами есть вопиющая проблема ...
Джонатан,
live () устарел.
guettli
4
$('#myForm').on('change', 'input[type=checkbox]', function() {
    this.checked ? this.value = 'apple' : this.value = 'pineapple';
});
Эвертон ЗП
источник
3
Пожалуйста, уточните свой ответ: решения, содержащие только код, с большей вероятностью будут удалены, потому что они не объясняют, а просто исправляют (если есть).
rekaszeru
Простите @rekaszeru, в следующий раз сделаю лучше
Everton ZP
0

Мне кажется, что removeProp не работает должным образом в Chrome: jsfiddle

        $('#badBut1').click(function () {
        checkit('Before');
        if( $('#chk').prop('checked') )
        {
          $('#chk').removeProp('checked');
        }else{
            $('#chk').prop('checked', true);
        }
        checkit('After');
    });
    $('#But1').click(function () {
        checkit('Before');
        if( $('#chk').prop('checked') )
        {
          $('#chk').removeClass('checked').prop('checked',false);
        }else{
            $('#chk').addClass('checked').prop('checked', true);
        }
        checkit('After');
    });

    $('#But2').click(function () {
        var chk1 = $('#chk').is(':checked');
        console.log("Value : " + chk1);
    });

    $('#chk').on( 'change',function () {
        checkit('Result');
    });
    function checkit(moment) {
        var chk1 = $('#chk').is(':checked');
        console.log(moment+", value = " + chk1);
    };
Laurent Belloeil
источник
Как переключить флажок без события (извне): jsfiddle.net/k91k0sLu/1
laurent belloeil
0

получить значение радио по имени

  $('input').on('className', function(event){
        console.log($(this).attr('name'));
        if($(this).attr('name') == "worker")
            {
                resetAll();                 
            }
    });
Шива Ананд
источник