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?
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 - Ссылка
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.
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:
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.
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.
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%Mike Fdz Code ist hervorragend. Um versteckte Felder zu überspringen, möchten Sie vielleicht die Zeile
ändern %Vor%dazu:
%Vor%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
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.
Tags und Links javascript cross-browser internet-explorer-9