Como lidar com a mudança de caixa de seleção usando jQuery?

106

Eu tenho algum código

<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);
        });
    }
});

Como lidar com a mudança de caixa de seleção usando jQuery? Eu preciso colocar o manipulador para alterar qualquer caixa de seleção marcada.

[atualizar]

Há uma caixa de seleção e alguns botões. Cada botão pode alterar a caixa de seleção. Como capturar um evento alterando a caixa de seleção?

[Atualizar]

Preciso lidar com a caixa de seleção de mudança neste jsfiddle de exemplo . Quando clico na caixa, o botão "OK" não é exibido.

CONTA
fonte
Eu realmente não entendo seu problema? O que deve acontecer quando uma caixa de seleção é alterada?
Niklas
Qual é o problema? Este código parece funcionar bem
JaredPar
2
Você poderia reformular sua pergunta? Você já tem $ ('input [type = "checkbox"]'). Alterar manipulador, o que está errado?
Madman
Se você alterar a caixa de seleção do botão, os eventos de alteração não ocorrem
BILL de
3
PARA SUA INFORMAÇÃO; $('#chk').prop('checked')retorna um booleano em vez do valor do atributo. Consulte api.jquery.com/prop
Stefan

Respostas:

163

Use o :checkboxseletor:

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

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

}); 

Código: http://jsfiddle.net/s6fe9/

Samich
fonte
75
... e this.checkedé muito útil para determinar se a caixa de seleção está marcada ou não.
Stefan
1
É possível registrar vários manipuladores?
BILL de
1
Isso ainda é recomendado em 2015?
Eugen Sunic
2
Não parece que a API foi alterada, então sim.
Samich
isso precisa estar dentro de $ (document) .ready (function () ... para mim, está correto?
kaya
66

Você também pode usar o Id do campo

$('#checkbox1').change(function() {
   if($(this).is(":checked")) {
      //'checked' event code
      return;
   }
   //'unchecked' event code
});
Pinkesh Sharma
fonte
17

Espero que isso seja de alguma ajuda.

$('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'
});
Lokesh Yadav
fonte
6
a partir do jQuery 1.6, é melhor usar $ (this) .prop ("verificado"), pois ele mudará dinamicamente com o estado real da caixa de seleção.
hrabinowitz de
3
.attr ("marcado") não está correto, porque não é atualizado quando o usuário clica. Confirmo o comentário de @hrabinowitz.
Adrien
7
$("input[type=checkbox]").on("change", function() { 

    if (this.checked) {

      //do your stuff

     }
});
Arjun
fonte
1
Verifique se o seu código funciona antes de postar. Há um problema gritante com seus seletores ...
Jonathan
live () está obsoleto.
guettli
4
$('#myForm').on('change', 'input[type=checkbox]', function() {
    this.checked ? this.value = 'apple' : this.value = 'pineapple';
});
Everton ZP
fonte
3
Elabore sua resposta: as soluções apenas de código têm maior probabilidade de serem excluídas, porque não explicam, apenas corrigem (se houver).
rekaszeru
Desculpe @rekaszeru, farei melhor da próxima vez
Everton ZP
0

Parece-me que removeProp não está funcionando corretamente no 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
fonte
Como alternar uma caixa de seleção sem evento (de fora): jsfiddle.net/k91k0sLu/1
laurent belloeil
0

obter valor de rádio por nome

  $('input').on('className', function(event){
        console.log($(this).attr('name'));
        if($(this).attr('name') == "worker")
            {
                resetAll();                 
            }
    });
Siva Anand
fonte