Eingabeereignis funktioniert nicht, wenn der Wert mit jQuery val () oder JavaScript geändert wird

8

Wenn ich den Wert eines Eingabefelds programmgesteuert ändere, werden die Ereignisse input und change nicht ausgelöst. Zum Beispiel habe ich dieses Szenario:

%Vor% %Vor%

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.

    
Duncan Luk 07.06.2016, 18:37
quelle

5 Antworten

15

Einfache Lösung:

Trigger input nach dem Aufruf von val() :

%Vor%

%Vor% %Vor%

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.

    
Jaqen H'ghar 13.06.2016, 17:33
quelle
4

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%

.

%Vor%

Oder diese jQuery, input Sache (nur in Bezug auf das obige Beispiel).

%Vor%

.

%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%

.

%Vor%     
rhavendc 13.06.2016 04:24
quelle
1
  

Sieht so aus, als gäbe es keine andere Möglichkeit, als .trigger() zu verwenden.

Versuchen wir dasselbe mit .change() event:

%Vor% %Vor%

Oder Sie müssen es manuell auslösen:

%Vor%

Snippet

%Vor% %Vor%
    
Praveen Kumar 07.06.2016 18:38
quelle
1

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

    
hightempo 18.06.2016 14:35
quelle
-1
%Vor%

Das Änderungsereignis wird nur ausgelöst, wenn die Eingabe verwischt wird.

    
gu mingfeng 12.06.2016 00:41
quelle

Tags und Links