Wie konvertiere ich Enter in Tab (mit Fokusänderung) in IE9? Es funktionierte in IE8

7

Ich habe eine Texteingabe mit einem onkeydown Event-Handler, der & lt; Enter & gt; nach & lt; Tab & gt; indem Sie den keyCode des Ereignisses von 13 auf 9 ändern.

%Vor%

Javascript:

%Vor%

In IE8 führte dies dazu, dass das Ereignis onchange ausgelöst wurde. In IE9 ist dies jedoch nicht der Fall. Stattdessen behält das Eingabefeld den Fokus bei. Wie kann ich das erreichen? (Es funktioniert in Firefox 3.6 und Chrome 10.0.) Dies funktioniert sogar im Browser-Modus IE9, wenn ich den Dokument-Modus auf "IE8 Standards" setze. Aber es wird nicht mit einem Dokument-Modus von "IE9-Standards" funktionieren. (Mein DocType ist XHTML 1.0 Transitional.)

Da es in IE7 & amp funktioniert; 8, könnte dies ein Fehler in IE9 sein, der behoben wird?

Bitte beachten Sie: I kann input.blur() nicht verwenden oder manuell einen neuen Fokus festlegen , was von allen anderen Lösungen empfohlen wird, die ich gelesen habe. Ich habe bereits versucht onkeypress und onkeyup ohne Glück. Ich brauche eine generische Lösung, die dazu führt, dass sich die Web-App so verhält, als würde ich auf "Tab & gt;" tippen. Außerdem habe ich keine jQuery, aber Dojo 1.5 ist für mich verfügbar.

Beachten Sie auch: Ich weiß, dass dies "falsches" Verhalten ist, und dass Enter das Formular einreichen sollte. Die Mitarbeiter meines Kunden stammen jedoch ursprünglich aus einer Umgebung mit einem grünen Bildschirm, in der die Eingabetaste sie zwischen Feldern verschiebt. Wir müssen dieselbe Benutzeroberfläche beibehalten. Es ist was es ist.

UPDATE: Ich habe einen Unterschied zwischen IE8 & amp; IE9. In IE8 gilt meine Einstellung von myEvent.keyCode . In IE9 tut es nicht. Ich kann window.event.keyCode aktualisieren, und es wird halten, aber das wird nicht beeinflussen, was später passiert. Argh ... Irgendwelche Ideen?

    
David 18.03.2011, 03:47
quelle

9 Antworten

14

Sieht aus wie IE9-Ereignisse unveränderlich sind. Sobald sie gefeuert wurden, können Sie die Eigenschaften für sie nicht ändern, sondern nur verhindernDefault () oder sie abbrechen. Daher ist es am besten, alle "Enter" -Ereignisse abzubrechen und ein neues DOM-Ereignis von der Texteingabe erneut zu versenden.

Beispiel

%Vor%

Hier ist die MSDN-Dokumentation zu IE9-DOM-Ereignissen:

Ereignisobjekt - Ссылка

createEvent - Ссылка

initialisiert ein Tastaturereignis - Ссылка

    
Shakakai 31.03.2011 18:41
quelle
3

Hier ist eine andere Idee; Ändern Sie das An-Senden, so dass es eine Funktion aufruft, anstatt das Formular zu verarbeiten. überprüfen Sie in der Funktion alle Felder, um festzustellen, ob sie leer sind, und konzentrieren Sie sich dann auf das nächste Feld, das keinen Wert enthält.
Sie geben also einen Wert in Feld 1 ein, drücken Enter und die Funktion wird ausgeführt. es sieht, dass Feld 1 voll ist, aber Feld 2 ist nicht, also auf Feld 2 konzentrieren.
Wenn alle Felder voll sind, senden Sie das Formular zur Verarbeitung.
Wenn das Formular Felder enthält, die leer sein können, könnten Sie ein boolesches Array verwenden, das mit dem onfocus () - Ereignis verfolgen würde, welche Felder den Fokus erhalten haben.

Nur eine Idee außerhalb der Box.

    
AndyD273 05.04.2011 15:06
quelle
3

Die vorherige IE-Version erlaubte die nicht schreibgeschützte Eigenschaft event.keyCode , IE9 entspricht jetzt den Standards.

Sie sollten die Funktionalität in Betracht ziehen, nach der Sie suchen: Sie möchten, dass sich die Eingabetaste wie die Tabulatortaste verhält, d. h. den Fokus auf das nächste (Text-) Eingabefeld verschiebt. Es gibt mehr Möglichkeiten, dies zu tun. Einer von ihnen verwendet das Attribut tabindex der Texteingabefelder. Wenn Sie die Felder in Ihrem Formular mithilfe dieses Tabindex-Attributs bestellen, können die Funktionen, die ich hier vorstelle, das gleiche Ergebnis wie Ihre vorherige keyCode-Methode ergeben. Hier sind zwei Funktionen, die ich in diesem Spiel getestet habe. Ein (Text-) Eingabefeld sieht nun so aus:

%Vor%

die zu verwendenden Funktionen für das Tabbing:

%Vor%

Wenn Sie tabindex nicht verwenden möchten und alle Ihre Eingabefelder 'tabbable' sind, sehen Sie diese jsfiddle

[ BEARBEITEN ] bearbeitete Funktionen (siehe jsfiddles), um die Ereignisdelegierung zu nutzen und alles in Opera zu arbeiten. Und diese Version imitiert auch shift-TAB.

    
KooiInc 05.04.2011 08:27
quelle
2

Der obige Code verursacht Probleme. Hier ist ein Code, der Ihnen hilft. Funktioniert auf IE9, FF5 usw.

%Vor%

Und dann sollten Sie nur Ihre Eingabetexte oder was auch immer

erstellen %Vor%     
Mike Fdz 11.08.2011 06:43
quelle
1

Ein <button> Element auf einer Seite verursacht dieses Problem.

In IE9 nimmt ein Element <button> den Fokus, wenn Enter gedrückt wird. Jede Schaltfläche zum Senden oder Zurücksetzen verursacht ebenfalls das Problem. Wenn Sie submit / reset nicht verwenden, können Sie dies beheben, indem Sie alle Schaltflächen in <input type="button"> ändern oder indem Sie die Schaltfläche Typ Attribut Schaltfläche. d. h.

%Vor%

Alternativ können Sie gemäß der Antwort von KooiInc Ihr JavaScript so bearbeiten, dass event.preventDefault(); verwendet wird, um zu verhindern, dass die Eingabetaste auf diese Weise wirkt, und explizit focus () für das nächste Element in der Aktivierreihenfolge aufruft.

Hier ist ein Testcode, den ich geschrieben habe, der das Problem mit dem Button-Element demonstriert (beachte den blauen Fokusring auf Button3 in IE9):

%Vor%     
robocat 02.06.2011 03:20
quelle
1

Mike Fdz Code ist hervorragend. Um versteckte Felder zu überspringen, möchten Sie vielleicht die Zeile

ändern %Vor%

dazu:

%Vor%     
Paul Harding 13.11.2011 17:59
quelle
1

Verwenden Sie onpaste zusammen mit onkeypress wie

Stellen Sie sich vor, Sie haben eine JavaScript-Funktion geschrieben, die die Textlänge überprüft, so dass wir sie beim Drücken der Taste wie folgt validieren müssen:

%Vor%

onkeypress funktioniert in FF und IE

Aber wenn Sie versuchen, ctr + V in Textfeld zu tun, dann wird onpaste in IE in FF behandeln onkeypress kümmert sich darum

    
sab 12.01.2012 04:41
quelle
0

Das habe ich mit dem gemacht, was ich über das Internet gefunden habe:

%Vor%     
webselect 01.03.2012 21:49
quelle
0

Um zu verhindern, dass ein "submit-Ereignis" durch die Eingabe-Tastatur in Ihrem Formular in IE9 ausgelöst wird, ziehen Sie eine beliebige Schaltfläche im Formularbereich zurück. Platziere ihn (Knopf) außerhalb des Formularbereichs.

%Vor% %Vor%
    
Odilon Salgado 17.04.2015 14:05
quelle