Carlos Hix: focus() im MSIE5

Hallo,

ich benutze öfters kleine Javascripts um eingaben in Formularfelder zu überprüfen. Falls bei einer diesen Überprüfungen ein Fehler / Falscheingabe entdeckt wird, soll eine Meldung ausgegeben werden (mittels "alert()") und der Cursor zurück in das betroffene Feld positioniert werden (mit "focus()", Beispiel weiter Unten). Das Problem ist: mit MSIE bis Version 4 und Netscape (zumindest alle getesteten Versionen) funktioniert es einwandfrei, bei MSIE5 gibt es allerdings ein seltsames verhalten: statt das der Cursor wie erwartet in das angegebene Feld positioniert wird, landet er in dem Seitenadresse-Feld (URL) des Browsers. Weis jemand wieso und (noch wichtiger) wie dieses verhalten zu umgehen ist?

Vielen Dank im Voraus

Carlos Hix

____________________________________________________
Beispielcode:

<HTML>
<HEAD>
<TITLE>Javascript Test</TITLE>
<SCRIPT language=Javascript1.1> <!--
function CheckInput(obj) {
with (obj) {
  if (value.toUpperCase()!="X") {
   focus();
   select();
   return false;
  }
}
return true;
}
// --> </SCRIPT>

<BODY>
<H1>Javascript Test</H1><BR>
<FORM name=TestForm onsubmit="return false">
Input 1: <INPUT name=Input1 onchange="return CheckInput this)"><BR>
Input 2: <INPUT name=Input2 onchange="return CheckInput(this)"<BR>
<INPUT name="Button1" onclick=TestForm.Input1.focus() type=button value="Button 1">
 
<INPUT name="Button2" onclick=TestForm.Input2.focus() type=button value="Button 2">
</FORM>

<SCRIPT language=Javascript1.1> <!--
TestForm.reset();
TestForm.Input1.focus();
// --> </SCRIPT>
</BODY>
</HTML>

  1. Hallo Carlos,

    mit MSIE bis Version 4 und Netscape (zumindest alle getesteten Versionen) funktioniert es einwandfrei, bei MSIE5 gibt es allerdings ein seltsames verhalten: statt das der Cursor wie erwartet in das angegebene Feld positioniert wird, landet er in dem Seitenadresse-Feld (URL) des Browsers.

    Zumindest einen Fehler konnte ich entdecken:
    <INPUT name=Input1 onchange="return CheckInput this)">
    sollte heissen
    <INPUT name=Input1 onchange="return CheckInput(this)">
    Ob's vielleicht das war?

    viele Gruesse
      Stefan Muenz

    1. Hallo Stefan,

      leider ist das nicht die Ursache des Problems, sondern lediglich ein Tipfehler beim Übertragen des Beispielcodes... Das beschriebene Problem scheint in der Interpretierung der focus() Funktion (oder Methode) durch den MSIE5 zu liegen, da dieses Beispiel in allen anderen getesteten Browsern korrekt funktioniert. Ich vermute das es sich hier oder um eine Microsoft spezifische Erweiterung handelt oder wirklich nur ein dummer Bug ist...

      Grüße

      Carlos

      1. Hallo,

        mir mir gibt es das geschilderte Problem mit IE 5 anscheinend nicht, auch nicht mit dem Beispieltext. Der Cursor erscheint ordentlich in den Feldern, das war‚s doch wohl ?

        Grüsse
        Kristof

        1. Hallo Kristof,

          die Frage ist, wann der Cursor in den "richtigen" Feld landet. Es funktioniert nämlich problemlos sofern man die Buttons anklickt, aber leider nicht wenn die Funtion (focus) von einen Event-Händler aufgeruhfen wird. Im Beispiel passiert dies sobald man in einen der beiden Eingabefelder irgend etwas anderes als X eintippt...

          Grüsse

          Carlos

          1. Moin Carlos,

            außer dem Fehler, den Stefan gefunden hatte, habe ich noch entdeckt, daß bei

            Input 2: <INPUT name=Input2 onchange="return CheckInput(this)"><BR>
            die schließende Klammer bei Input fehlt                (hier   ^).

            aber leider nicht wenn die Funtion (focus) von einen Event-Händler aufgeruhfen wird. Im Beispiel passiert dies sobald man in einen der beiden Eingabefelder irgend etwas anderes als X eintippt...

            Dann funktioniert es bei mir (IE5, Version: 5.00.2014.0216) allerdings einwandfrei (nach Verlassen eines Feldes mit einem anderen Inhalt als "X" wird dieses Feld wieder aktiviert (focus) und der Inhalt selektiert (select)).

            Gruß
            Dirk