Ich habe folgendes:
<form id="myform">
<input type="checkbox" name="check1" value="check1">
<input type="checkbox" name="check2" value="check2">
</form>
Wie verwende ich jQuery, um einmyform
eingetretenes Check-Ereignis zu erfassen und festzustellen, welches Kontrollkästchen aktiviert oder deaktiviert wurde (und ob es aktiviert oder deaktiviert wurde)?
this
ist bereits auf das DOM-Element des Kontrollkästchens eingestellt und reicht daherthis.checked
aus. Sie müssen kein weiteres jQuery-Objekt dafür erstellen, es sei denn, Sie möchten es bearbeiten.<label for='myInput'>Checkbox:</label><input id='myInput' name='myInput' type='checkbox'/>
) haben und auf die Bezeichnung klicken, wird das Kontrollkästchen aktiviert, diese Funktion wird jedoch NICHT aufgerufen. Sie sollten die.change()
Veranstaltung nutzenVerwenden Sie das Änderungsereignis.
quelle
$("input[name=check1]").prop('checked', true)
. Siehe jsfiddle.net/Z3E8V/2:checkbox
es sich um eine jQuery-Erweiterung handelt und nicht Teil der CSS-Spezifikation ist, können Abfragen mit:checkbox
nicht die Leistungssteigerung der nativen DOM-querySelectorAll()
Methode nutzen. Verwenden Sie[type="checkbox"]
stattdessen eine bessere Leistung in modernen Browsern ."Es gibt mehrere nützliche Antworten, aber keine scheint die neuesten Optionen abzudecken . Zu diesem Zweck berücksichtigen alle meine Beispiele auch das Vorhandensein übereinstimmender
label
Elemente und ermöglichen es Ihnen, dynamisch Kontrollkästchen hinzuzufügen und die Ergebnisse in einem Seitenbereich anzuzeigen (durch Umleitenconsole.log
).Das Abhören von
click
Ereignissencheckboxes
ist keine gute Idee, da dadurch weder die Tastatur umgeschaltet noch Änderungen vorgenommen werden können, bei denen auf ein übereinstimmendeslabel
Element geklickt wurde. Hören Sie immer auf daschange
Ereignis.Verwenden Sie den
:checkbox
Pseudo-Selektor jQuery anstelle voninput[type=checkbox]
.:checkbox
ist kürzer und besser lesbar.Verwenden Sie diese
is()
Option mit dem:checked
Pseudo-Selektor jQuery , um zu testen, ob ein Kontrollkästchen aktiviert ist. Dies funktioniert garantiert in allen Browsern.Grundlegende Ereignisbehandlungsroutine, die an vorhandene Elemente angehängt ist:
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/2/
Anmerkungen:
:checkbox
Selektor, der der Verwendung vorzuziehen istinput[type=checkbox]
Delegierter Ereignishandler, der an das Vorgängerelement angehängt ist:
Delegierte Ereignishandler sind für Situationen konzipiert, in denen die Elemente möglicherweise noch nicht vorhanden sind (dynamisch geladen oder erstellt), und sind sehr nützlich. Sie delegieren die Verantwortung an ein Ahnenelement (daher der Begriff).
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/4/
Anmerkungen:
change
), um zu einem sich nicht ändernden Vorfahrenelement (in diesem Fall#myform
) aufzublasen .':checkbox'
in diesem Fall) , um nur die Elemente in der Blasenkette .document
als Standard, um den delegierten Ereignishandler zu verbinden, wenn nichts anderes näher / bequemer ist.body
zum Anhängen delegierter Ereignisse verwenden, da es einen Fehler (im Zusammenhang mit dem Styling) gibt, der verhindern kann, dass Mausereignisse abgerufen werden.Das Ergebnis delegierter Handler ist, dass die übereinstimmenden Elemente nur zur Ereigniszeit vorhanden sein müssen und nicht, wenn der Ereignishandler registriert wurde. Dies ermöglicht dynamisch hinzugefügten Inhalt, um die Ereignisse zu generieren.
F: Ist es langsamer?
A: Solange sich die Ereignisse mit Benutzerinteraktionsgeschwindigkeiten befinden, müssen Sie sich keine Gedanken über den vernachlässigbaren Geschwindigkeitsunterschied zwischen einem delegierten Ereignishandler und einem direkt verbundenen Handler machen. Die Vorteile der Delegation überwiegen bei weitem alle geringfügigen Nachteile. Delegierte Ereignishandler lassen sich tatsächlich schneller registrieren, da sie normalerweise eine Verbindung zu einem einzelnen übereinstimmenden Element herstellen.
Warum wird
prop('checked', true)
daschange
Ereignis nicht ausgelöst?Dies ist eigentlich beabsichtigt. Wenn es das Ereignis auslösen würde, würden Sie leicht in eine Situation endloser Updates geraten. Senden Sie stattdessen nach dem Ändern der aktivierten Eigenschaft ein Änderungsereignis mit
trigger
(nichttriggerHandler
) an dasselbe Element :zB ohne dass ein
trigger
Ereignis eintrittJSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/5/
zB mit
trigger
dem normalen Änderungsereignis wird abgefangenJSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/6/
Anmerkungen:
triggerHandler
wie von einem Benutzer vorgeschlagen, da es keine Ereignisse an einen delegierten Ereignishandler weiterleitet.JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/8/
obwohl es wird für einen Event - Handler arbeiten direkt mit dem Element:
JSFiddle: http://jsfiddle.net/TrueBlueAussie/u8bcggfL/9/
Referenz: http://api.jquery.com/triggerhandler/
Wenn jemand zusätzliche Funktionen hat, von denen er glaubt, dass sie nicht davon betroffen sind, schlagen Sie bitte Ergänzungen vor .
quelle
Verwenden der neuen Ein-Methode in jQuery (1.7): http://api.jquery.com/on/
quelle
$("input[name=check1]").prop('checked', true)
. Siehe jsfiddle.net/Z3E8V/2.triggerHandler('change');
nach dem.prop
Anruf hinzu. Dann schaltet es die Box um UND ruft das Ereignis auf.quelle
val()
sagt Ihnen nicht , wennchecked
isttrue
.In Anerkennung der Tatsache , dass der Fragesteller jQuery ausdrücklich darum gebeten , und dass die gewählte Antwort richtig ist, sei darauf hingewiesen, dass dieses Problem nicht wirklich brauchen jQuery pro sagen. Wenn man dieses Problem ohne es lösen möchte, kann man einfach das einstellen
onClick
Attribut der Kontrollkästchen , denen Sie zusätzliche Funktionen hinzufügen möchten, z. B.:HTML:
Javascript:
Geige: http://jsfiddle.net/Y9f66/1/
quelle
Ich habe versucht, den Code von der ersten Antwort, es funktioniert nicht, aber ich habe herumgespielt und diese Arbeit für mich
quelle