Gibt es eine Möglichkeit haben keyup
, keypress
, blur
, und change
Ereignisse rufen die gleiche Funktion in einer Zeile oder muss ich sie separat zu tun?
Das Problem, das ich habe, ist, dass ich einige Daten mit einer Datenbank-Suche validieren muss und sicherstellen möchte, dass die Validierung auf keinen Fall übersehen wird, unabhängig davon, ob sie eingegeben oder in das Feld eingefügt wurden.
jquery
events
jquery-events
shaneburgess
quelle
quelle
.on('keyup.foo keypress.foo blur.foo change.foo', …)
oder.on('keyup keypress blur change .foo', …)
?on('click tap', e => {...})
. Der Listener kann zweimal ausgelöst werden. Ich möchte nur einmal auslösen. Wie kann ich in der Listener-Funktion codieren?$('#element:not(.busy)').on('keyup keypress blur change', function(e){…});
entfernen Sie schließlich den Klassennamen 'beschäftigt'.Ab jQuery 1.7 ist die
.on()
Methode die bevorzugte Methode zum Anhängen von Ereignishandlern an ein Dokument. In früheren Versionen wird die.bind()
Methode zum direkten Anhängen eines Ereignishandlers an Elemente verwendet.quelle
Ich suchte nach einer Möglichkeit, den Ereignistyp zu ermitteln, wenn jQuery mehrere Ereignisse gleichzeitig abhört, und Google hat mich hierher gebracht.
Für Interessierte
event.type
ist meine Antwort:Weitere Informationen finden Sie im jQuery-Dokument .
quelle
Sie können die Bindungsmethode verwenden , um Funktionen an mehrere Ereignisse anzuhängen. Übergeben Sie einfach die Ereignisnamen und die Handlerfunktion wie in diesem Code:
Eine weitere Option ist die Verwendung der Verkettungsunterstützung von jquery api.
quelle
Wenn Sie denselben Ereignishandler an mehrere Ereignisse anhängen, tritt häufig das Problem auf, dass mehrere von ihnen gleichzeitig ausgelöst werden (z. B. drückt der Benutzer nach der Bearbeitung die Tabulatortaste; Keydown, Ändern und Unschärfe können alle ausgelöst werden).
Es klingt so, als ob das, was Sie tatsächlich wollen, ungefähr so ist:
quelle
So mache ich es.
quelle
Sie können die Funktion, die Sie wiederverwenden möchten, wie folgt definieren:
Und später können Sie festlegen, wie viele Ereignis-Listener für Ihr Objekt diese Funktion auslösen sollen, indem Sie on ('event') verwenden, wobei ein Leerzeichen dazwischen verbleibt, wie unten gezeigt:
quelle
Die Antwort von Tatu ist, wie ich es intuitiv machen würde, aber ich habe im Internet Explorer einige Probleme mit dieser Art des Verschachtelns / Bindens der Ereignisse festgestellt, obwohl dies über die
.on()
Methode erfolgt.Ich konnte nicht genau bestimmen, bei welchen Versionen von jQuery dies das Problem ist. Aber ich sehe das Problem manchmal in den folgenden Versionen:
Meine Problemumgehung bestand darin, zuerst die Funktion zu definieren.
und dann die Ereignisse einzeln behandeln
Dies ist nicht die schönste Lösung, aber sie funktioniert für mich, und ich dachte, ich würde sie veröffentlichen, um anderen zu helfen, die über dieses Problem stolpern könnten
quelle
In diesem Tutorial werden mehrere Ereignisse behandelt.
quelle
Es ist möglich
.on()
, Folgendes zu verwenden , das die folgende Struktur akzeptiert:.on( events [, selector ] [, data ], handler )
Sie können also mehrere Ereignisse an diese Methode übergeben. In Ihrem Fall sollte es so aussehen:Und hier ist das Live-Beispiel:
quelle
Es ist einfach, dies mit den integrierten DOM-Methoden ohne eine große Bibliothek wie jQuery zu implementieren. Wenn Sie möchten, ist nur ein bisschen mehr Code erforderlich. Durchlaufen Sie ein Array von Ereignisnamen und fügen Sie für jeden einen Listener hinzu:
quelle