Kontrolliertes Änderungsereignis eines Kontrollkästchens abfangen


125

Wie kann ich das Ereignis zum Überprüfen / Deaktivieren <input type="checkbox" />mit jQuery abfangen ?


1
Wenn Sie eine relativ neue Version von JQuery verwenden, würde ich die .on ('change', function () {...}) verwenden, wie in der Antwort von @Daniel De Leon unten erwähnt. Ein Vorteil ist, dass der Ereignis-Listener "on" an dynamisch generiertes HTML gebunden wird.
BLang

Antworten:


172
<input type="checkbox" id="something" />

$("#something").click( function(){
   if( $(this).is(':checked') ) alert("checked");
});

Bearbeiten: Dies wird nicht erfasst, wenn sich das Kontrollkästchen aus anderen Gründen als einem Klick ändert, z. B. über die Tastatur. Um dieses Problem zu vermeiden, hören Sie changestatt click.

Informationen zum programmgesteuerten Aktivieren / Deaktivieren finden Sie unter Warum wird mein Kontrollkästchen-Änderungsereignis nicht ausgelöst?


document.getElementById ('etwas'). geprüft funktioniert, warum $ ('# etwas'). geprüft funktioniert nicht?
Omg

In Ihrem Code fehlt ein Paran, und Sie sollten wirklich die jQuery-Methode verwenden, um den Prüfstatus abzurufen.
Pete Michaud

2
Shore: Der Grund, warum getElementById funktioniert, ist, dass es ein DOM-Element zurückgibt, während die Funktion $ jQuery ein jQuery-Objekt zurückgibt. Das jQuery-Objekt hat das DOM-Element als Eigenschaft, ist jedoch selbst kein DOM-Objekt.
Pete Michaud

3
Ich weiß, dass ich zu spät zur Party komme, aber dies funktioniert nur, wenn ein "Klick" -Ereignis dies auslöst. Wenn Sie aus irgendeinem Grund an einer anderen Stelle im Code so etwas tun würden: $ ("# etwas"). Attr ("geprüft", "geprüft"), würde das Klickereignis niemals ausgelöst.
David Stinemetze

3
@ DavidStinemetze: Ich würde sagen, dass Sie Ton hören könnten, changeanstatt zu klicken. Ich aktualisiere die Antwort
Marcgg

44

Der Klick wirkt sich auf eine Beschriftung aus, wenn eine an das Eingabe-Kontrollkästchen angehängt ist.

Ich denke, dass es besser ist, die .change () -Funktion zu verwenden

<input type="checkbox" id="something" />

$("#something").change( function(){
  alert("state changed");
});

1
Dies sollte die akzeptierte Antwort sein, da es bei der Frage darum geht, auf ein Überprüfungsereignis zu warten, nicht auf ein Klickereignis.
Jessica


13

Für JQuery 1.7+ verwenden Sie:

$('input[type=checkbox]').on('change', function() {
  ...
});

4

Verwenden Sie dazu das folgende Code-Snippet:

$('#checkAll').click(function(){
  $("#checkboxes input").attr('checked','checked');
});

$('#UncheckAll').click(function(){
  $("#checkboxes input").attr('checked',false);
});

Oder Sie können dasselbe mit einem einzigen Kontrollkästchen tun:

$('#checkAll').click(function(e) {
  if($('#checkAll').attr('checked') == 'checked') {
    $("#checkboxes input").attr('checked','checked');
    $('#checkAll').val('off');
  } else {
    $("#checkboxes input").attr('checked', false);
    $('#checkAll').val('on'); 
  }
});

Für die Demo: http://jsfiddle.net/creativegala/hTtxe/


3

Nach meiner Erfahrung musste ich das aktuelle Ziel der Veranstaltung nutzen:

$("#dingus").click( function (event) {
   if ($(event.currentTarget).is(':checked')) {
     //checkbox is checked
   }
});

3

Dieser Code macht, was Sie brauchen:

<input type="checkbox" id="check" >check it</input>

$("#check").change( function(){
   if( $(this).is(':checked') ) {
        alert("checked");
    }else{
        alert("unchecked");
   }
});

Sie können es auch auf jsfiddle überprüfen


2

Verwenden Sie das Klickereignis, um die beste Kompatibilität mit MSIE zu erzielen

$(document).ready(function() {
    $("input[type=checkbox]").click(function() {
        alert("state changed");
    });
});

Wie kann man beurteilen, ob es aktiviert ist oder nicht?
Omg

Ich muss wissen, ob ein Klick das Aktivieren oder Deaktivieren bedeutet.
Omg

1
Sie können dann $ (this) .is (': checked') verwenden, um den Status des gerade angeklickten Elements zu testen
Ty W

-1
$(document).ready(function(){
    checkUncheckAll("#select_all","[name='check_boxes[]']");
});

var NUM_BOXES = 10;
// last checkbox the user clicked
var last = -1;
function check(event) {
  // in IE, the event object is a property of the window object
  // in Mozilla, event object is passed to event handlers as a parameter
  event = event || window.event;

  var num = parseInt(/box\[(\d+)\]/.exec(this.name)[1]);
  if (event.shiftKey && last != -1) {
    var di = num > last ? 1 : -1;
    for (var i = last; i != num; i += di)
      document.forms.boxes['box[' + i + ']'].checked = true;
  }
  last = num;
}
function init() {
  for (var i = 0; i < NUM_BOXES; i++)
    document.forms.boxes['box[' + i + ']'].onclick = check;
}

HTML:

<body onload="init()">
  <form name="boxes">
    <input name="box[0]" type="checkbox">
    <input name="box[1]" type="checkbox">
    <input name="box[2]" type="checkbox">
    <input name="box[3]" type="checkbox">
    <input name="box[4]" type="checkbox">
    <input name="box[5]" type="checkbox">
    <input name="box[6]" type="checkbox">
    <input name="box[7]" type="checkbox">
    <input name="box[8]" type="checkbox">
    <input name="box[9]" type="checkbox">
  </form>
</body>

15
Hey! Kumpel, was machst du hier?
Omg

Sieht aus wie eine Bereichsauswahl (dh überprüfen Sie das erste Element, halten Sie die Umschalttaste gedrückt, überprüfen Sie das letzte; und alle dazwischen sind aktiviert.) Dies ist jedoch viel mehr, als die Frage verlangt. Es fehlt jedoch ein Code wie checkUncheckAll ().
Joel und
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.