Wie kann ich umwandeln Geben Sie auf der Registerkarte (mit Fokus ändern) im IE9? Es arbeitete in IE8
Ich habe eine text-Eingabe mit einem onkeydown-event-handler wandelt die <EINGABETASTE> zu <Tab> durch die änderung der Veranstaltung keyCode von 13 auf 9.
<input type="text" onkeydown="enterToTab(event);" onchange="changeEvent(this);"
name="" value="" />
<!-- Other inputs exist as created via the DOM, but they are not sibling elements. -->
Javascript:
function enterToTab(myEvent) {
if (myEvent.keyCode == 13) {
myEvent.keyCode = 9;
}
}
function changeEvent(myInput) { var test = "hello"; }
In IE8, dieser verursacht das onchange-Ereignis ausgelöst, aber das passiert nicht im IE9. Stattdessen das Eingabefeld behält den Fokus. Wie kann ich das möglich machen? (Es funktioniert in Firefox 3.6 und Chrome 10.0.) Das funktioniert auch im Browser-Modus im IE9, wenn ich die Dokument-Modus auf "IE8-standards". Aber es wird nicht die Arbeit mit einem Dokument-Modus von "IE9-standards". (Mein DocType ist XHTML 1.0 Transitional.)
Da es funktioniert im IE7 & 8, könnte das ein bug im IE9 zu bekommen, die befestigt?
Bitte beachten Sie: ich nicht verwenden input.blur()
oder manuell einen neuen Schwerpunkt, die, beraten durch alle anderen Lösungen, die ich gelesen habe. Ich habe schon versucht, onkeypress und onkeyup mit kein Glück. Ich brauche eine generische Lösung, die bewirken, dass die web-app buchstäblich so Verhalten, als wäre würd ich hit <Tab>. Auch glaube ich nicht, habe jQuery, allerdings Dojo 1.5 steht mir zur Verfügung.
Beachten Sie auch: ich WEIß, das ist "falsch" Verhalten, und dass Eingeben sollte, das Formular zu senden. Jedoch, meine Kunden Mitarbeiter kommen ursprünglich aus einem green-screen-Umgebung, wo Geben Sie verschiebt Sie zwischen den Feldern. Wir müssen weiterhin die gleiche Benutzeroberfläche. Es ist, was es ist.
UPDATE: fand ich einen Unterschied zwischen IE8 & IE9. Im IE8, meine Einstellung myEvent.keyCode
hält. Im IE9 NICHT. Ich kann das update window.event.keyCode
, und es halten wird, aber das wird nicht beeinflussen, was passiert, später. Argh... Irgendwelche Ideen?
- Ich hatte das gleiche problem, aber über die COM-Objekte. Ich habe es geschrieben es [hier][1]. Jemand kommentierte mit den gleichen JavaScript-Problem. Auch hat sich unser Unternehmen eröffnet ein microsoft-Fall in der Hoffnung, eine realistische Antwort. Ich werde aktualisieren, meine Frage mit etwas nützliches. Danke. [1]: stackoverflow.com/questions/5127079/...
- Die Frage ist, warum würden Sie wollen, dies zu tun. Tab ist die Taste, navigiert zwischen den Feldern. Enter wird benutzt, um ein Formular Absenden. Benutzer erwarten, dass Sie dieses Verhalten, also warum verwirren Sie?
- Auch dies ist ein Fehler im IE 9. Die
keyCode
Eigentum der TastaturEvent
Objekte gelesen-nur in allen anderen Browsern als IE <= 8 und es gibt keine Spezifikation für diese Eigenschaften. - Unsere Benutzer erwarten oft die enter-Taste, um zum nächsten Eingabefeld. Wahrscheinlich ist dieses Verhalten von älteren windows - /dos-Programme
- IE11 Updates, diese richtig (Fokus nicht verschieben). IE10 Art der arbeiten (Eingang verwischt aber die Schaltfläche ist nicht Fokus). Testen Sie das Verhalten mit output.jsbin.com/nideqoq/quiet
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht aus wie IE9 Veranstaltungen sind unveränderlich. Wenn Sie einmal entlassen wurden, können Sie nicht die Eigenschaften ändern, nur preventDefault() oder diese Abbrechen. So Sie beste option, um zu kündigen "enter" - Veranstaltungen und-neu-Versand einen neuen DOM-Ereignis-von der Texteingabe.
Beispiel
Hier ist der MSDN-Dokumentation um IE9 DOM-Ereignisse:
Event-Objekt - http://msdn.microsoft.com/en-us/library/ms535863(v=vs. 85).aspx
createEvent - http://msdn.microsoft.com/en-us/library/ff975304(v=vs. 85).aspx
initialisieren Sie ein Tastatur-Ereignis - http://msdn.microsoft.com/en-us/library/ff975297(v=vs. 85).aspx
Hier ist eine andere Idee; ändern auf "Absenden", so dass es eine Funktion aufruft, anstatt die Bearbeitung der form. in der Funktion prüfen Sie alle Felder, um zu sehen, wenn Sie leer sind, dann den Fokus auf das nächste Feld, das nicht einen Wert haben.
So geben Sie einen Wert in Feld 1, drücken Sie enter, und die Funktion ausgeführt wird. er sieht, dass Bereich 1 ist voll, aber Feld 2 nicht, so konzentrieren sich auf Feld 2.
Dann wenn alle Felder voll sind, senden Sie das Formular für die Verarbeitung.
Wenn die Formular-Felder können leer sein, Sie könnte ein boolean-array, das würde zu behalten, welche Felder erhalten den Fokus mit dem onfocus () - Ereignis.
Nur außerhalb der box-Idee.
Die Vorherige IE-version erlaubt die nicht-standard-beschreibbare
event.keyCode
Eigenschaft, IE9 entspricht jetzt den standards.Möchten Sie vielleicht zu prüfen, die Funktionalität Sie nach: Sie wollen die enter-Taste verhält sich wie die tab-Taste, d.h. verschieben des Fokus zur nächsten (text -) Eingabefeld. Es gibt mehr Möglichkeiten, das zu tun. Einer von Ihnen ist mit der
tabindex
- Attribut des text-Eingabe-Felder. Wenn Sie die Reihenfolge der Felder in Ihrem Formular über das tabindex-Attribut, das die Funktionen, die ich hier vorstellen kann, erzielen Sie dasselbe Ergebnis wie die Vorherige keyCode-Methode. Hier sind zwei Funktionen, die ich getestet dieses jsfiddle. Eine (text -) Eingabefeld sieht nun folgendermaßen aus:Funktionen für Navigation mit der Tabulatortaste:
Wenn Sie nicht möchten, dass die Verwendung von tabindex und alle deine input-Felder 'tabbable', siehe dieses jsfiddle
[BEARBEITEN] bearbeitet Funktionen (siehe jsfiddles) zu machen, der Einsatz von event-delegation und machen es alle Arbeit in der Oper zu. Und diese version imitiert shift-TAB auch.
Den obigen code zu Problemen führt. Hier ist etwas code, der Ihnen helfen wird. Funktioniert auf IE9, FF5 etc.
Und dann sollten Sie einfach erstellen Sie Ihre eingegebenen Texte oder was auch immer
Einen
<button>
element auf einer Seite wird dieses problem verursachen.In IE9 eine
<button>
element in den Fokus nimmt, wenn die EINGABETASTE gedrückt wird. Alle submit oder reset-Taste wird die Ursache des Problems zu. Wenn Sie nicht mit submit/reset, dann Sie können dies beheben, indem Sie alle Tasten, um<input type="button">
oder durch die Einstellung der button type-Attribut die Schaltfläche. alsoAlternativ als pro KooiInc Antwort, Sie können Ihre javascript
event.preventDefault();
um zu verhindern, dass die Enter-Taste, auf diese Weise handeln, und rufen explizit focus() auf das nächste element in der tab-Reihenfolge.Hier ist etwas test-code, den ich schrieb, das veranschaulicht das problem mit dem button-element (Hinweis: der Blaue Fokus-ring auf button3 im IE9):
Mike Fdz-code ist hervorragend. Um zu überspringen hidden-Feldern können Sie die Zeile ändern möchten
zu diesem:
Verwenden onpaste zusammen mit onkeypress wie
Meinung sind, Sie haben wrriten eine javascript-Funktion ein, die überprüft die text Länge so brauchen wir, um ihn zu bestätigen auf-Taste drücken Sie wie unten
onkeypress funktioniert in beide FF und IE
aber wenn Sie versuchen zu tun, ctr+V in die textbox dann onpaste Griff im IE im FF onkeypress kümmert es
Dies ist, was ich getan habe, was ich über das internet gefunden :
Zu verhindern, dass ein "submit-Ereignis" ausgelöst durch die Enter-Tastatur in Ihrer Form in IE9, ziehen Sie eine beliebige Schaltfläche im Formular-Bereich. Platzieren Sie ihn (button) außerhalb der form angezeigt.
JS:
HTML: