Pento: Kein focus() bei Firefox und Mozilla

Hallo

Ich bekomme keinen Focus auf ein Input-Feld im Firefox (1.07, 1.04) und Mozilla (1.7.5)
Ich habe eine Testseite gemacht: http://www.freehost.ag/cu/test/test.html.
Diese ist im wesentlichen aus SELFHTML 8.1 kopiert, nur habe ich 3 Input-Felder statt einem gemacht, um das Problem deutlicher zu machen.

Die erste focus-Anweisung (eventunahbhängig, beim Laden) wird richtig durchgeführt. Die onBlur-abhängige Anweisung macht folgendes:
Wenn ich in ein anderes Input-Feld klicke, kommt zwar der alert(),
der Focus bleibt jedoch danach beim falschen Input-Feld.
Wenn ich irgendwo im Fenster klicke, kommt beim Firefox nach dem alert() zwar der Focus zum Input-Feld jedoch nicht so, dass man dann schreiben könnte. Der Focus scheint am Rand zu hängen.
Beim Mozilla kommt gar kein Focus.

Im Opera (8.5) und IE (6.0, 5.5) ist der Focus nach dem alert() beim
richtigen Input-Feld.
Die Javascript-Konsole zeigt bei mir keine Fehler an.

Kann mir jemand von euch weiterhelfen?

Liebe Grüße aus Wien
Pento

  1. Hallo,

    Ich habe eine Testseite gemacht: http://www.freehost.ag/cu/test/test.html.

    Welchen Zweck hat die Werbung in der Testseite?

    Die onBlur-abhängige Anweisung macht folgendes:

    Hast Du Dir mal angesehen, welche Auswirkungen das Deiner Meinung nach "richtige" Verhalten des IE hat? Man kann diese Seite nur ganz schwer wieder verlassen, selbst wenn man Dein Formular gar nicht ausfüllen _will_. Muss man wollen?

    Kann mir jemand von euch weiterhelfen?

    Prüfe doch _bitte_ onsubmit des Formulars. So etwa:

    <form name="Test" action="#" onsubmit="return CheckInhalt(this)">
    1. Name: <input type="text" name="gabe"><br>
    2. Name: <input type="text" name="Eingabe"><br>
    3. Name: <input type="text" name="abe"><br>
    Bei mittlerem Feld (2. Name) nichts eingeben und OK klicken!
    <input type="Submit" name="OK" value="OK">
    </form>

    <script type="text/javascript">
    document.forms["Test"].elements["Eingabe"].focus();
    function CheckInhalt (formular) {
      if (formular.elements["Eingabe"].value == "") {
        alert("Namensfeld muss einen Inhalt haben!");
        formular.elements["Eingabe"].focus();
        return false;
      }
    }
    </script>

    viele Grüße

    Axel

    1. Hallo Axel

      Erstmal Danke für deine Hilfe

      Welchen Zweck hat die Werbung in der Testseite?

      Es handelt sich hier um Gratiswebspace, die Werbung muss ich halt in Kauf nehmen.

      Hast Du Dir mal angesehen, welche Auswirkungen das Deiner Meinung nach "richtige" Verhalten des IE hat? Man kann diese Seite nur ganz schwer wieder verlassen, selbst wenn man Dein Formular gar nicht ausfüllen _will_.

      Ja, da hast du recht.
      Aus genau diesem Grund werde ich höchstwahrscheinlich auch onSubmit verwenden.

      Trotzdem hätte ich gerne gewusst, warum Firefox und Mozilla den Focus nicht auf das Input-Feld setzen - einfach, um es zu verstehen.
      Denn wenn man die Seite nur mehr schwer verlassen kann ist das ja nicht die Schuld des Browsers, insofern würde ich schon erwarten dass der Fokus gesetzt wird.
      Oder meintest du, dass Firefox focus-Anweisungen innerhalb einer Funktion ignoriert, die mit onBlur aufgerufen wird?
      Sozusagen um logische Unzulänglichkeiten auszugleichen?

      Einstweilen liebe Grüße aus Wien
      Pento

      1. Hallo,

        Trotzdem hätte ich gerne gewusst, warum Firefox und Mozilla den Focus nicht auf das Input-Feld setzen - einfach, um es zu verstehen.

        So, wie ich das sehe, wird das schon versucht, es scheitert aber.

        Oder meintest du, dass Firefox focus-Anweisungen innerhalb einer Funktion ignoriert, die mit onBlur aufgerufen wird?
        Sozusagen um logische Unzulänglichkeiten auszugleichen?

        Nein, wohl nicht explizit so programmiert, aber als (un)angenehmer ;-)) Nebeneffekt des internen Programmablaufs im Gecko-Browser. Offensichtlich wird die Abarbeitung einer JavaScript .focus()-Methode im Eventhandler onblur nicht _richtig_ unterstützt. Mit folgendem lässt sich das nachweisen:

        <form name="Test" action="#">
        1. Name: <input type="text" name="t1" onblur="this.form.t3.focus();"><br>
        2. Name: <input type="text" name="t2" onblur="this.form.t3.focus();"><br>
        Nur hier hin mit dem Focus:<br>
        3. Name: <input type="text" name="t3" onblur="this.form.t3.focus();"><br>
        </form>

        Durch mehrfaches Klicken(Tastaturnavigation erzeugt den Fehler nicht) in die verschiedenen Textfelder, kann man runtime Exceptions erzeugen:
        Fehler: [Exception... "'Die Erlaubnis für das Lesen der Eigenschaft XULElement.selectedIndex wurde verweigert' when calling method: [nsIAutoCompletePopup::selectedIndex]"  nsresult: "0x8057001e (NS_ERROR_XPC_JS_THREW_STRING)"  location: "JS frame :: <unknown filename> :: onblur :: line 0"  data: no]

        Offensichtlich beißen sich hier onblur="element.focus()" und das Öffnen der Auswahlliste bereits getätigter Eintragungen im mit der _Maus_ angeklickten (focusierten) Formularfeld.

        viele Grüße

        Axel

        1. Hallo Axel

          Fein, dass du drangeblieben bist und so ausführlich getestet hast.

          Ich konnte das von dir beschriebene Verhalten auch erzeugen.
          Es dürfte sich bei diesem Prozess aber nicht um jenes autocomplete handeln, dass man mit autocomplete="off" im form- oder input-tag abschalten kann, oder?
          Zumindest ist das Verhalten des Browsers bei abgeschaltetem autocomplete das gleiche wie bei eingeschaltetem.
          Ausserdem setzt der Browser den Focus auch dann nicht, wenn man irgendwo im Fenster klickt.

          Einstweilen immer noch ratlose, aber trotzdem herzliche Grüße aus Wien
          Pento

  2. Hi,

    bei mir (Firefox 1.0.4) funktioniert das Wechseln.

    Beim Laden der Seite ist der Fokus auf der zweiten Textbox, und wenn ich in eine andere klicke bringt er seinen  Text; anschließend verrutscht auch der Fokus dort hin wo er sollte und ich kann schreiben.

    E7