NenntMichHarry: Element.Focus() Problem

Hallo zusammen.

Ich möchte eine Eingabe in einem Textfeld überprüfen. Falls diese Falsch sein sollte wird ein Alert Fenster geöffnet und danach rufe ich Focus so auf:

document.getElementById("date").focus();

Das funktioniert einfach nicht. Ich hab mir Beispielprogramme geschrieben wo das immer funktioniert. Wieso hier nicht ? Vielleicht weil es dasselbe Element ist? Die Function, die das macht wird beim verlassen, also onblur() aufgerufen.

Im Debugger sieht das so aus, als ob das Element ganz kurz den Focus bekommt, dieser dann aber wieder verschwindet.

Wenn einer einen Tipp hat wäre ich sehr dankbar. Ich verwende Firefox 3.0.3.

Gruß

Harry

  1. Hallo,

    Vielleicht weil es dasselbe Element ist?

    Ja. Ein focus() im blur-Handler wird aus Gründen der Benutzbarkeit geblockt.

    Das kann man umgehen, indem man en focus-Aufruf mit einem Timeout verzögert:

    window.setTimeout(function () {
       document.getElementById("date").focus();
    }, 1);

    Mathias

    1. Klappt wunderbar, man lernt nie aus :-)

      Danke !

      Grüße,

      Harry

  2. [latex]Mae  govannen![/latex]

    Ich möchte eine Eingabe in einem Textfeld überprüfen. Falls diese Falsch sein sollte wird ein Alert Fenster geöffnet und danach rufe ich Focus so auf:

    document.getElementById("date").focus();

    Das funktioniert einfach nicht. Ich hab mir Beispielprogramme geschrieben wo das immer funktioniert. Wieso hier nicht ? Vielleicht weil es dasselbe Element ist? Die Function, die das macht wird beim verlassen, also onblur() aufgerufen.

    <ganz fett>Ganz schlechte Idee. Laß es bloß sein.</ganz fett> Wenn man in dieses Feld etwas eintragen will, es also aktiviert und sich dann doch anders entscheidet, kommt man evtl. aus der Sache nicht mehr raus, weil jedes Mal durch blur ein neues Alert-Fenster kommt. Danach wird das Feld durch Javascript wieder aktiviert, beim erneuten Versuch, es zu verlassen, wird erneut das alert-Fenster geöffnet .. usw. Datenüberprüfung sollte man nur bei Submit des Formulars durchführen.

    Cü,

    Kai

    --
    Ash nazg durbatulûk, ash nazg gimbatul,ash nazg thrakatulûk, agh burzum-ishi krimpatul
    selfcode sh:( fo:| ch:? rl:( br:< n4:# ie:{ mo:| va:) js:) de:> zu:) fl:( ss:| ls:?
    1. Danke für den Tipp Kai. Ich bin übrigens derselben Meinung wie du, allerdings ist dies eine Vorgabe an der ich nichts rütteln kann ;-)

      Ich hatte vorher, dass bei Falscheingabe das Feld auf "" gesetzt wird, was ich persönlich weniger nervig finde. Aber gegen Vorgaben kann man nichts tun ^^

      Gruß,

      Harry

    2. Hallo,

      kommt man evtl. aus der Sache nicht mehr raus, weil jedes Mal durch blur ein neues Alert-Fenster kommt.

      alert wäre in der Tat ein Schuss ins Knie, besser wäre ein confirm.

      Danach wird das Feld durch Javascript wieder aktiviert, beim erneuten Versuch, es zu verlassen, wird erneut das alert-Fenster geöffnet .. usw. Datenüberprüfung sollte man nur bei Submit des Formulars durchführen.

      change und blur können durchaus genutzt werden, um z.B. das Formularfeld rot zu markieren und eine Fehlermeldung (im DOM, nicht als Meldungsfenster) dahinter einzublenden, aber ein Auto-Fokus und ein Meldungsfenster sind tatsächlich problematisch.

      Mathias

      1. Ich hab es jetzt auch mit confirm gelöst. Mir war das mit dem Alert echt zu blöd. Wenn confirm en true zurückgibt wird der focus gesetzt, ansonsten nicht und das Feld bekommt den wert "". Somit kann der User selbst entscheiden, ob er es direkt berichtigt oder später nachtragen möchte.

        Danke euch beiden nochmal.

        Gruß