Come gestire il cambio di casella di controllo utilizzando jQuery?


106

Ho del codice

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

Come gestire il cambio di casella di controllo utilizzando jQuery? Devo mettere il gestore per modificare le caselle di controllo selezionate.

[aggiornare]

C'è una casella di controllo e alcuni pulsanti. Ogni pulsante può cambiare la casella di controllo. Come catturare un evento cambiando la casella di controllo?

[Aggiornare]

Ho bisogno della casella di controllo del cambio di gestione in questo esempio jsfiddle . Quando clicco sulla casella, il messaggio "OK" non viene visualizzato.


Non capisco davvero il tuo problema? Cosa dovrebbe accadere quando viene modificata una casella di controllo?
Niklas

Qual è il problema? Questo codice sembra funzionare perfettamente
JaredPar

2
Potresti riformulare la tua domanda? Hai già $ ('input [type = "checkbox"]'). Change handler, cosa c'è che non va?
Madman

Se si modifica la casella di controllo del pulsante, gli eventi di modifica non si verificano
FATTURAZIONE

3
FYI; $('#chk').prop('checked')restituisce un valore booleano anziché il valore dell'attributo. Vedi api.jquery.com/prop
Stefan

Risposte:


163

Usa :checkboxselettore:

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

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

}); 

Codice: http://jsfiddle.net/s6fe9/


75
... ed this.checkedè molto utile per determinare se la casella di controllo è selezionata o meno.
Stefan

1
È possibile registrare più gestori?
BILL

1
È ancora consigliato nel 2015?
Eugen Sunic

2
Non sembra che l'API sia stata modificata, quindi sì.
Samich

questo deve essere all'interno di $ (document) .ready (function () ... per me, è corretto?
kaya

67

Puoi anche utilizzare l'ID del campo

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

17

Spero, questo sarebbe di qualche aiuto.

$('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
a partire da jQuery 1.6, meglio usare $ (this) .prop ("verificato"), poiché cambierà dinamicamente con lo stato effettivo della casella di controllo.
hrabinowitz

3
.attr ("verificato") non è corretto, perché non viene aggiornato quando l'utente fa clic. Confermo il commento di @ hrabinowitz.
Adrien

7
$("input[type=checkbox]").on("change", function() { 

    if (this.checked) {

      //do your stuff

     }
});

1
Si prega di verificare che il proprio codice funzioni prima di pubblicare. C'è un problema evidente con i tuoi selettori ...
Jonathan

live () è deprecato.
guettli

4
$('#myForm').on('change', 'input[type=checkbox]', function() {
    this.checked ? this.value = 'apple' : this.value = 'pineapple';
});

3
Elabora la tua risposta: le soluzioni di solo codice hanno maggiori probabilità di essere eliminate, perché non spiegano, si limitano a correggere (se presenti).
rekaszeru

Mi dispiace @rekaszeru farò meglio la prossima volta
Everton ZP

0

Mi sembra che removeProp non funzioni correttamente in 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);
    };

Come attivare o disattivare una casella di controllo senza eventi (dall'esterno): jsfiddle.net/k91k0sLu/1
laurent belloeil

0

ottenere il valore della radio in base al nome

  $('input').on('className', function(event){
        console.log($(this).attr('name'));
        if($(this).attr('name') == "worker")
            {
                resetAll();                 
            }
    });
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.