Enrico: onload im Body-Tag nach Fokus nicht ausführen

Hallo,

Ich setze nach dem Aufruf unserer Formulare den Fokus nach einer bestimmten Zeit automatisch auf das erste editierbare Eingabefeld:

<body onload="setTimeout ('FocusSetzen ()', 5000);">

Dies ist recht nützlich, wenn man den Fokus selber noch auf kein Feld gesetzt hat, beispielsweise durch Anklicken des Eingabefeldes, das man ausfüllen will.

Hinderlich ist dies aber, wenn man sich bereits in einem Eingabefeld befindet, da man dann automatisch in's erste Eingabefeld springt.

Gibt es eine Möglichkeit, das onload-Ereignis nur ausführen zu lassen, wenn man bis zum Ablauf der definierten Zeit noch kein Eingabefeld angewählt hat ?

Danke und Gruss,
Enrico

  1. Gibt es eine Möglichkeit, das onload-Ereignis nur ausführen zu lassen, wenn man bis zum Ablauf der definierten Zeit noch kein Eingabefeld angewählt hat ?

    Ja. Durch geschickte if-Benutzung des Eventhandlers onfocus. http://de.selfhtml.org/javascript/sprache/eventhandler.htm#onfocus

    Herzlich, twb

    1. Hallo twb,

      Ich müsste also mit einer Funktion arbeiten, die in den Handler onload eingebunden wird und überprüft, ob ein anderes Eingabefeld ein Focus-Flag zurückgibt (beispielsweise über einen Schalter) ?

      Kann das funktionieren ?

      Enrico

      1. Ich müsste also mit einer Funktion arbeiten, die in den Handler onload eingebunden wird und überprüft, ob ein anderes Eingabefeld ein Focus-Flag zurückgibt (beispielsweise über einen Schalter) ?

        Exakt. Flags zu setzen brauchst Du allerdings nicht - true und false reichen vollauf (Abfrage, ob in elements[x] der focus sitzt, falls false, focus() setzen. (Und das sage ausgerechnet ich, der ich in meinem Spieleskript noch Flags sonder Zahl verwende...
        ;-)

        Kann das funktionieren ?

        Ich wüsste nicht, was dagegen spricht.

        Herzlich, twb

        1. hi,

          Exakt. Flags zu setzen brauchst Du allerdings nicht - true und false reichen vollauf

          man könnte auf flags auch ganz verzichten - wenn man aus den formularfeldern heraus beim fokussieren einfach den timeout mit clearTimeout wieder löscht.

          gruß,
          wahsaga

          --
          "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
          1. Hallo wahsaga,

            mein Lösungsvorschlag hat sich mit Deinem Vorschlag überschnitten.

            Hab jetzt Deinen gleich mal eingebaut, aber leider funktioniert es nicht:

            <body onload="setTimeout ('FocusSetzen ()', 5000);">
              <form ...>
                <input ... onfocus="clearTimeout (Focus_setzen);" ...>
              </form>
            </body>

            Was stimmt noch nicht ?

            Enrico

            1. hi,

              Hab jetzt Deinen gleich mal eingebaut, aber leider funktioniert es nicht:
              onfocus="clearTimeout (Focus_setzen);" ...>
              Was stimmt noch nicht ?

              clearTimeout hat keine ahnung, welchen timeout du meinst.
              schau dir die beschreibung in selfhtml noch mal genauer an ...

              gruß,
              wahsaga

              --
              "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
              1. Ich bekomme die Fehlermeldung, dass die Variable "Fokus" nicht definiert ist, wenn ich die 5 Sekunden abwarte, bis der Fokus auf dem ersten Feld ist und die Seite im Anschluss daran auffrische.

                Der gleiche Fehler tritt auf, wenn ich vor Ablauf der Zeit die Warteschleife abbreche, in dem ich den Fokus selber auf ein Feld setze.

                Da muss doch noch ein Fehler vorhanden sein.

                Enrico

                1. <HTML>
                  <script>
                  function abgelaufen() {
                           document.getElementById("input1").focus();
                  }
                  function manuellFocus(input) {
                           clearTimeout(timeout1);
                           input.value="";
                  }

                  </script>

                  <body onload="timeout1 = setTimeout ('abgelaufen()', 5000);">

                  <form>
                  <input id="input1" onfocus="manuellFocus(this);" value="Feld 1"></input>
                  <input id="input2" onfocus="manuellFocus(this);" value="Feld 2"></input>
                  <input id="input3" onfocus="manuellFocus(this);" value="Feld 3"></input>
                  </form>

                  </body>
                  </HTML>

                  1. Habe den Fehler gefunden.

                    Es lag nicht an den Funktionen selber, sondern nur daran, dass ich die Timer-Variable nicht ausserhalb der Funktionen definiert hatte.

                    Besten Dank für Eure Hilfen :-))

                    Enrico

            2. ich glaube, so ist es richtig:

              onload="Fokus = setTimeout ('Focus_setzen ()', 5000);"

              onfocus="window.clearTimeout (Fokus);"

              Es funktioniert zumindest   :o)

              Enrico

          2. man könnte auf flags auch ganz verzichten - wenn man aus den formularfeldern heraus beim fokussieren einfach den timeout mit clearTimeout wieder löscht.

            Das ist natürlich wesentlich eleganter. Enrico: Hier (http://de.selfhtml.org/javascript/objekte/window.htm#clear_timeout) geht's lang.
            Herzlich, twb

        2. Hallo twb,

          meinst Du folgendermassen ?

          <body onload="if (! Fokus) setTimeout ('FocusSetzen ()', 5000);">
            <form ...>
              <input ... onfocus="var Fokus = new Boolean ('true')">
              ...
            </form>
          </body>

          Enrico

  2. Ich setze nach dem Aufruf unserer Formulare den Fokus nach einer bestimmten Zeit automatisch auf das erste editierbare Eingabefeld:

    <body onload="setTimeout ('FocusSetzen ()', 5000);">

    Warum wartest du 5 Sekunden lang nachdem die Seite geladen wurde bis du den Focus setzt?

    Struppi.

    1. Hallo Struppi,

      Ich habe das Formular so gestaltet, dass das Label (Name, eMail,...) im Eingabefeld steht und verschwindet, wenn das Feld den Fokus erhält.

      Grund ist, dass ich das Formular auf diese Weise in seiner Grösse reduzieren kann und mir alle anderen Varianten, sowohl mit CSS als auch mit Tabellen nicht gefallen haben.

      Wenn nun gleich nach dem Laden des Formulares der Fokus in das erste Eingabefeld gesetzt wird, dann verschwindet auch das Label bzw. ist gar nicht sichtbar und dann weiss man nicht, welche Eingaben das Feld erwartet.

      Enrico