input type text und onKeyDown funktioniert nicht unter IE
Schreibe ich eine WWW-Anwendung, es muss laufen unter IE. Ich habe das problem mit dem code, der läuft unter FF, aber ich kann nicht, es läuft unter IE.
//JS-code
function test()
{
if (window.event.keyCode == 13)
window.location.assign("myPage.php");
}
Ich habe versucht einige ähnliche Wege, um das Fenster an.Ort und Lage.href, auch dokumentieren.Lage. Ich habe gelesen, dass der IE hat Probleme damit, also bitte ich um eine Lösung.
Ziel ist es, dass die Seite neu geladen nach dem eingeben im text in <input type='text' name='item_code' onKeyDown='test()'>
und klicken Sie auf Sie die EINGABETASTE. Also das Ergebnis ist ähnlich wie das drücken der senden-Typ-button unterhalb der text-Eingabe.
Im IE lädt es die gleiche Seite und es passiert nichts. In der FF es korrekt funktioniert.
UPDATE 1:
Versuchte Lösung gegeben durch bobince.
<input type='text' name='item_code'>
<script type='text/javascript' >
document.getElementsByName('item_code')[0].onkeydown = function(event)
{
if (event == undefined) { event = window.event; }
if (event.keyCode == 13) { window.location = 'myPage.php'; }
alert('1');
}
</script>";
Das problem ist, dass, wenn es alert('1');
Zeile, Seite zeigt Alarm und leitet, wenn es nicht alert('1');
Zeile, Seite einfach neu geladen zu sich selbst. Ich weiß nicht, was ist hier das problem?
UPDATE 2:
Ich bin einfügen, was dann endlich funktioniert für mich.
<form action='mainPage.php' method='POST'>
<input type='text' name='item_code'>
</form>
<script type='text/javascript' >
document.getElementsByName('item_code')[0].onkeydown= function(event)
{
if (event == undefined)
{
event = window.event;
}
if (event.keyCode == 13)
{
var js_item_code = document.getElementsByName('item_code')[0].value;
window.location = 'myPage.php?item_code='+js_item_code;
return false;
}
};
</script>
- Wie wäre
window.location.href = "myPage.php";
window.location.href
keineassign
Methode (window.location
tut). Aber ich glaube nicht, das ist Ihr problem, denn das gleiche gilt (und wirft einen Fehler) in Firefox. Sie haben auch einige andere Tippfehler in deinem code (den ich behoben, aber Sie bearbeitet wieder :-))- oh, wusste nicht, pls Bearbeiten Sie Sie wieder, wenn Sie können, schätzen Sie Ihre Eingabe
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist merkwürdig, da die Verwendung von
window.event
sollten gewährleisten, dass Ihre Funktion nur jemals funktioniert im IE. Das ist sicherlich das, was passiert ist für mich, wenn ich versuche deinen code. Ich vermute, es gibt mehr bist du nicht und zeigen Sie uns.Den üblichen Weg, um Ereignisse zu behandeln, die in einem cross-browser-Wege mit inline-event-handler-Attribute wäre:
Dies funktioniert, weil
event
im Attribut bezieht sich auf die Globalewindow.event
im IE, wo in jedem anderen browser-es bezieht sich auf das lokale argument mit dem Namenevent
übergeben, um die event-handler-Attribut-Funktion.Jedoch, es ist allgemein als besser zu vermeiden event-handler-Attributen und zuweisen-Handler von JavaScript selbst. In diesem Fall müssen Sie eine Prüfung um zu sehen, welche zu verwenden:
Im Allgemeinen würde ich nur versuchen, trap Geben Tastendrücke reproduzieren/alter-default-Formulars Verhalten als letztes Mittel; es ist besser, wenn Sie können, lassen Sie das Formular abschicken, um den Ort, den Sie wollen, es zu gehen.
alert('sth');
ist nach der 2. if-block: die Seite zeigt eine Warnung und leitet. Wenn ich diese entfernen alert line, Seite neu geladen, um sich..<form>
element dann müssen Siereturn false
zu den event-handler, sonst wird das Formular weiter reichen als normal für das drücken der Enter-Taste, und am Ende in der formaction
Attribut (standardmäßig wird die aktuelle URL, wenn Sie weggelassen werden, obwohl das weglassen ist es ungültig). Wenn Sie ein Formular und Sie möchten trap-Abgabe auf die (über Enter oder mit anderen Mitteln), ist es weit besser, dasonsubmit
Veranstaltung statt sorgen über die Wiedererschaffung der browser-spezifischen Schlüssel-handling-Verhalten.<form>
und nur das Nackte<input>
Elemente, so gibt es keine ungewollten Veröffentlichungen.onsubmit
ist auf<form>
. Sie könnenreturn false
aus einem submit-handler zum stoppen der form vorgelegt wird. [Sie können auchreturn false
auf einen submit-button istonclick
handler zu stoppen, klicken Sie auf die verursachende form eingereicht werden. Sie können auchreturn false
auf eine Eingabe deronkeypress
handler stoppen Sie die EINGABETASTE drücken, wodurch die form zu übermitteln. Sie können auchreturn false
auf eine Eingabe deronkeydown
handler zu stoppen, das keydown-Ereignis verursacht einekeypress
, die wiederum hält auch die form, eingereicht werden! Aber blockierenonsubmit
ist der zuverlässigste, wie es erfasst alle Fälle.]window.event
funktioniert auch in den letzten (und wahrscheinlich auch ältere) Versionen von Chrome und Safari.versuchen. es hat für mich gearbeitet früher.
onKeyPress
ist jetzt eine Funktion, ein Verweis auf dieKeyCheck
Funktion und macht dann nichts mit ihm.KeyCheck
wird nie aufgerufen werden.Sollte es funktionieren im Allgemeinen. Zwei mögliche Probleme, die Sie möglicherweise ausführen in:
jQuery fix
Es ist ein Weg, um es Arbeit ohne Verwendung der
<form>
tag auf Ihren html-code.Dies ist die einfachste Lösung, die ich gefunden, die funktioniert mit IE, Chrome und Firefox mindestens:
JS:
HTML: