Wie gehe ich mit dem Ändern des Kontrollkästchens mit jQuery um?


106

Ich habe einen Code

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

Wie gehe ich mit dem Ändern des Kontrollkästchens mit jQuery um? Ich muss den Handler setzen, um alle aktivierten Kontrollkästchen zu ändern.

[aktualisieren]

Es gibt ein Kontrollkästchen und einige Schaltflächen. Jede Schaltfläche kann das Kontrollkästchen ändern. Wie fange ich ein Ereignis ab, indem ich das Kontrollkästchen ändere?

[Aktualisieren]

Ich brauche Handle Change Checkbox in diesem Beispiel jsfiddle . Wenn ich auf das Feld klicke, wird die Meldung "OK" nicht angezeigt.


Ich verstehe dein Problem nicht wirklich? Was soll passieren, wenn ein Kontrollkästchen geändert wird?
Niklas

Was ist das Problem? Dieser Code scheint gut zu funktionieren
JaredPar

2
Könnten Sie bitte Ihre Frage umformulieren? Sie haben bereits $ ('input [type = "checkbox"]'). Handler ändern, was ist falsch?
Madman

Wenn Sie das Kontrollkästchen ändern, treten keine Änderungsereignisse auf
BILL

3
Zu Ihrer Information; $('#chk').prop('checked')Gibt eher einen Booleschen Wert als den Wert des Attributs zurück. Siehe api.jquery.com/prop
Stefan

Antworten:


163

Verwenden Sie den :checkboxSelektor:

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

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

}); 

Code: http://jsfiddle.net/s6fe9/


75
... und this.checkedist sehr nützlich, um festzustellen, ob das Kontrollkästchen aktiviert ist oder nicht.
Stefan

1
Ist es möglich, mehrere Handler zu registrieren?
Rechnung

1
Wird dies auch 2015 noch empfohlen?
Eugen Sunic

2
Es sieht nicht so aus, als ob die API geändert wurde, also ja.
Samich

Dies muss innerhalb von $ (document) .ready (function () sein ... ist das für mich richtig?
kaya

66

Sie können auch die ID des Feldes verwenden

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

17

Hoffe, das wäre hilfreich.

$('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
Ab jQuery 1.6 ist es besser, $ (this) .prop ("markiert") zu verwenden, da es sich dynamisch mit dem tatsächlichen Status des Kontrollkästchens ändert.
Hrabinowitz

3
.attr ("markiert") ist nicht korrekt, da es nicht aktualisiert wird, wenn der Benutzer klickt. Ich bestätige den Kommentar von @ hrabinowitz.
Adrien

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

    if (this.checked) {

      //do your stuff

     }
});

1
Bitte überprüfen Sie vor dem Posten, ob Ihr eigener Code funktioniert. Es gibt ein eklatantes Problem mit Ihren Selektoren ...
Jonathan

live () ist veraltet.
Guettli

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

3
Bitte erläutern Sie Ihre Antwort: Nur-Code-Lösungen werden mit größerer Wahrscheinlichkeit gelöscht, da sie nicht erklären, sondern nur korrigieren (falls vorhanden).
Rekaszeru

Sorry @rekaszeru Ich werde es beim nächsten Mal besser machen
Everton ZP

0

Mir scheint, removeProp funktioniert in Chrome nicht richtig: 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);
    };

So schalten Sie ein Kontrollkästchen ohne Ereignis (von außen) um: jsfiddle.net/k91k0sLu/1
Laurent Belloeil

0

Funkwert nach Namen abrufen

  $('input').on('className', function(event){
        console.log($(this).attr('name'));
        if($(this).attr('name') == "worker")
            {
                resetAll();                 
            }
    });
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.