Simulieren Sie den Enter-Schlüssel im Formularfeld und bewahren Sie andere Handler auf

8

Wir versuchen, einen generischen Ansatz für eine Software zu entwickeln, die in Formularfelder eingebunden ist.

So weit, so gut, aber wir laufen in einen Randfall, der verhindert, dass ein Formular / Feld eingereicht wird, in das ein anderer Handler eingebunden ist.

Hier ist der (kondensierte) Anwendungsfall:

HTML:

%Vor%

Normales Verhalten ist, dass wenn ein Benutzer "foo" in das Feld eintippt und die Eingabetaste drückt, das Formular bearbeitet und an den richtigen "Endpunkt" übergeben wird, der nicht unbedingt der im öffnenden Tag des Formulars definierte ist. Es könnte eine Funktion (von irgendwo anders) geben, die dieses Enter-Ereignis behandelt.

Leider können wir nicht vorhersagen, was diese Funktion ist, wir möchten sie allgemein halten.

Im obigen HTML sollte ein Klick auf den Link ein enter-event im Formularfeld auslösen, das das Verhalten des Browsers / Benutzers und damit einen unbekannten Handler nachahmt.

Das ist unser Javscript (wir benutzen jquery):

%Vor%

Wenn Sie 'foo' in das Feld eingeben und die Eingabetaste drücken, wird das Formular gesendet. Aber wenn wir auf den Link klicken, machen wir einen Fokus () und feuern dann das Schlüsselereignis, aber das Formular wird nicht gesendet .

Wir können ein submit () wegen der unbekannten Handler nicht verwenden.

Probieren Sie den Code hier aus: Ссылка

    
unicorn80 18.04.2016, 10:35
quelle

3 Antworten

7

Wenn die Eingabetaste gedrückt wird, geschieht Folgendes: Wenn die Eingabe in einem Formular erfolgt, wird das Formular gesendet. Dies ist das Standardverhalten. Wenn Sie einen Tastendruck simulieren, sollten Sie dasselbe tun, sofern das Standardverhalten nicht verhindert wird.

%Vor%

Jetzt können Sie Ihr Ereignisobjekt an die Handler übergeben, und sie können das Senden verhindern, wenn sie dies wünschen, oder Sie können es in Ihrem Tastendruck-Handler verhindern.

    
Gökhan Kurt 21.04.2016, 13:41
quelle
2

Sie sollten den Formularhandler von den Eingabe- und Klickhandlern trennen.

%Vor%

Dann setze deinen keypress Handler wie folgt:

%Vor%

Und Ihr Klick-Handler wie folgt:

%Vor%     
Ionian316 20.04.2016 18:43
quelle
1

Sie können die unbekannten Handler mit unbind('submit') losbinden und dann submit() wie folgt verwenden.

%Vor%     
Ibrahim Khan 20.04.2016 18:37
quelle

Tags und Links