2017-03-06 7 views
0

Ich habe einige merkwürdige Probleme mit Ereignisbindungen in JQuery. Wir haben viele Eingaben, die wir gerne wissen würden, wenn ihre Werte vom Benutzer geändert werden. Ich lege ihre Veranstaltungen diese Art und Weise:Ereignis vor dem Binden durchgeführt und nach dem Binden ausgelöst

$(document).on("change", ".myClass", changed); 

Aber manchmal müssen wir automatische Änderungen über diese Bereiche durchzuführen, so dass ich unbind diese Ereignisse, um die Änderungen durchzuführen und die Ereignisse erneut binden, um zu ändern Auslösungen in diesem Updates zu vermeiden:

$(document).off("change", ".myClass"); 
$(".myClass").val(whatever); 
$(document).on("change", ".myClass", changed); 

Aber wenn wir in einem dieser Eingänge nach diesem letzten Prozess klicken wir, dass die Änderung Feuer Ereignis erhalten, auch wenn das Feld nicht jedes Ereignis angeschlossen hatte, wenn sie aktualisiert wurde. Wir wissen, dass Änderungsereignis nicht ausgelöst wird, bis das Feld den Fokus verliert, aber wir verstehen dieses Verhalten nicht.

Jede Hilfe oder Klärung wäre zu begrüßen.

Vielen Dank im Voraus.

Sorry, ich meinte geändert statt Änderung().

+2

Sie müssen dem delegierten Ereignishandler den * Verweis * der Funktion geben, nicht den * Rückgabewert * der Funktion: '$ (document) .on ('change', '.myClass', geändert)'. Beachten Sie auch, dass Ihre Logik sowieso egal ist, da das Ändern des Werts eines Elements durch das Programm kein "Change" -Ereignis auslöst, siehe: https://jsfiddle.net/2185v3z5/ –

+0

Ich sehe in Ihrem Beispiel, dass Sie Recht haben, aber Die Anhebung des Ereignisses passiert in meinem Code, also muss ich sagen, dass ich ein Problem habe, das ich nicht gesehen habe. Vielen dank für Deine Hilfe. – MKP

Antwort

1

ändern Top-Linie von

$(document).on("change", ".myClass", changed()); 

zu

$(document).on("change", ".myClass", changed); 

Sie rufen die Methode changed() und den Rückgabewert aus dem changed() Verfahren bereitgestellt wird.

1

Ein Funktionsname mit Klammern wie changed() ruft die Funktion sofort auf. Das bedeutet, dass das dritte Argument den Rückgabewert Ihrer changed Funktion wirklich übergibt. Sie sollten die Zeile ändern:

$(document).on("change", ".myClass", changed); 

Jetzt ist Ihre changed Funktion wird nur ausgelöst, wenn das Ereignis eintritt.

Verwandte Themen