Wenn ich den Wert eines Eingabefelds programmgesteuert ändere, werden die Ereignisse input
und change
nicht ausgelöst. Zum Beispiel habe ich dieses Szenario:
Das Problem: Das Ereignis wird ausgelöst, wenn ich das Textfeld eintippe, aber nicht, wenn ich den Knopf drücke. Gibt es eine Möglichkeit, dies mit irgendeiner Art von Ereignis oder anderweitig zu erreichen, ohne es manuell tun zu müssen?
Was ich nicht tun möchte: Ich könnte meinen gesamten Code durchgehen, um manuell einen trigger
- oder Funktionsaufruf hinzuzufügen, aber das ist nicht das, wonach ich suche.
Warum: Der Hauptgrund, warum ich das automatisch machen möchte, ist, dass ich viele Eingabefelder und viele verschiedene Stellen habe, an denen ich diese Eingaben programmgesteuert ändern kann. Es würde mir viel Zeit ersparen, wenn es eine Möglichkeit gäbe, das Ereignis automatisch auszulösen , wenn irgendeine Eingabe irgendwo in meinem Code geändert wird.
Einfache Lösung:
Trigger input
nach dem Aufruf von val()
:
Spezifische Lösung:
Wie bereits erwähnt, möchten Sie input
nicht manuell auslösen. Diese Lösung löst das Ereignis automatisch durch Überschreiben von val()
aus.
Fügen Sie das einfach Ihrem Code hinzu:
%Vor%Siehe JSFiddle Demo
PS
Beachten Sie this.is('input:text')
in der Bedingung. Wenn Sie das Ereignis für weitere Typen auslösen möchten, fügen Sie sie der Bedingung hinzu.
Es gibt einige Möglichkeiten, wie Sie es erreichen können. Hier können Sie das oninput()
-Ereignis des levelup-HTML-Codes verwenden, das sofort auftritt, wenn ein Element geändert wird, und die Funktion aufrufen.
.
%Vor% Oder diese jQuery, input
Sache (nur in Bezug auf das obige Beispiel).
.
%Vor% Sie können auch Javascript setInterval()
verwenden, das ständig mit einer bestimmten Intervallzeit läuft. Es ist nur optional und am besten, wenn Sie ein zeitbezogenes Programm machen.
.
%Vor%Sieht so aus, als gäbe es keine andere Möglichkeit, als
.trigger()
zu verwenden.
Versuchen wir dasselbe mit .change()
event:
Oder Sie müssen es manuell auslösen:
%Vor%Snippet
jQuery-Listener funktionieren nur bei tatsächlichen Browserereignissen, und diese werden nicht ausgelöst, wenn Sie etwas programmgesteuert ändern.
Sie können Ihre eigene jQuery-Miniaturerweiterung erstellen, um diese so zu proxygrafieren, dass Sie das Ereignis immer nur auslösen, aber nur an einem einzigen modularen Ort ausführen müssen:
%Vor%Rufen Sie dann einfach Ihre neue Funktion auf, wenn Sie Ihr Textfeld aktualisieren möchten, anstatt jQuerys Funktion 'val' zu verwenden:
%Vor%Hier ist eine Version, die mit einer Proxy-Funktion arbeitet:
%Vor%Als Referenz wurde diese Frage hier schon beantwortet: Warum wird das Ereignis jquery change nicht ausgelöst, wenn ich den Wert einer Auswahl mit val () festlege?
und hier: JQuery erkennt programmatische Änderungsereignisse
Das Änderungsereignis wird nur ausgelöst, wenn die Eingabe verwischt wird.
Tags und Links javascript html jquery events input