Doc_McSky: Eingabefeld mit JS fokussieren

Hallo Leute,

ich schaue gerade etwas bedröppelt, schaffe ich es doch nicht ein input-Feld zu fokussieren auf der Seite, ganz komisch.

Ich habe Input Felder, wie dieses:

<input type="text" name="qty" value="" class="inp_row" size="3" maxlength="3" id="inp_big" autocomplete="off" />

und dann habe ich, egal ob davor oder danach einen Javascriptblock gesetzt, der einfach obiges Element fokussieren soll:

<SCRIPT language="JavaScript">
 document.getElementsByName('qty')[0].focus();
</script>

Sollte ja eigentlich klappen, aber denkste, nix tut er. :(

Schreibe ich aber genau diese document.xx Anweisung in den Body-Tag mittels onload="document.get...focus();", dann klappt das sofort.

Wo ist jetzt der Denkfehler? Was mache ich im JS falsch?

Gruß Doc

  1. @@Doc_McSky

    und dann habe ich, egal ob davor oder danach einen Javascriptblock gesetzt

    Nein, nicht egal. Das JavaScript kann das Element nur finden, wenn es zur Zeit der Ausführung schon im DOM ist. Wenn also das script nach dem input im HTML steht (oder per Eventsteuerung erst später ausgeführt wird).

    Sollte ja eigentlich klappen, aber denkste, nix tut er. :(

    Doch, tut er.

    Der Fehler liegt in den von dir nicht gezeigtem Code.

    Zu dem von dir gezeigtem:

    • language="JavaScript" war schon immer Unsinn. Weg damit!

    • Warum selektierst du das Feld mühselig über dessen name, wo es doch eine ID hat?

    LLAP 🖖

    --
    „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
    „Hat auf dem Forum herumgelungert …“
    (Wachen in Asterix 36: Der Papyrus des Cäsar)
    1. Hallo Gunnar,

      danke für die Antwort.

      und dann habe ich, egal ob davor oder danach einen Javascriptblock gesetzt

      damit wollte ich sagen, das ich schon beides probiert hatte. Meinem Verständnis nach gebe ich dir auch Recht, der JS Code sollte im HTML nach den Input Feldern kommen. Habe ich ja versucht, macht er ja nicht. :( Warum macht er es denn wenn der JS Befehl im Body bei onload="..." steht?

      Der Fehler liegt in den von dir nicht gezeigtem Code.

      Na wenn auf der Seite sonst ein Fehler wäre, dann würde der JS Code ja eh nicht ausgeführt, egal ob er so notiert wäre oder im onload="...", oder nicht? Ein Debugger schmeißt auch keine Fehler raus.

      • language="JavaScript" war schon immer Unsinn. Weg damit!

      Ja ok, kann weg, das stimmt, dürfte aber nicht zu dem Fehler führen...

      • Warum selektierst du das Feld mühselig über dessen name, wo es doch eine ID hat?

      Ja, hast auch Recht, aber die ID ist in diesem Fall eine reine CSS ID, die leider im Quelltext mehrfach vorkommt. :-D

      1. @@Doc_McSky

        damit wollte ich sagen, das ich schon beides probiert hatte. Meinem Verständnis nach gebe ich dir auch Recht, der JS Code sollte im HTML nach den Input Feldern kommen. Habe ich ja versucht, macht er ja nicht. :(

        Hab deinen Code kopiert (grr) und das Eingabefeld hatte den Fokus bekommen. Also liegt der Fehler bei dir wohl woanders.

        Online-Beispiel, bitte!

        Ja, hast auch Recht, aber die ID ist in diesem Fall eine reine CSS ID, die leider im Quelltext mehrfach vorkommt. :-D

        Diesen Fehler solltest du berichtigen. IDs müssen dokumentweit eindeutig sein; es darf nicht mehrere Elemente mit derselben ID geben.

        LLAP 🖖

        --
        „Wir haben deinen numidischen Schreiber aufgegriffen, o Syndicus.“
        „Hat auf dem Forum herumgelungert …“
        (Wachen in Asterix 36: Der Papyrus des Cäsar)
      2. Hallo

        und dann habe ich, egal ob davor oder danach einen Javascriptblock gesetzt

        damit wollte ich sagen, das ich schon beides probiert hatte. Meinem Verständnis nach gebe ich dir auch Recht, der JS Code sollte im HTML nach den Input Feldern kommen. Habe ich ja versucht, macht er ja nicht. :( Warum macht er es denn wenn der JS Befehl im Body bei onload="..." steht?

        Mit onload wird der JS-Code ausgeführt, wenn das HTML-Dokument geladen ist. Damit ist sichergestellt, dass das Element, wie alle anderen, vorhanden ist. Deswegen sollte es ja auch funktionieren, wenn der JS-Code im Quelltext hinter dem zu manipulierenden Element steht. Dann ist es ja ebenfalls vorhanden.

        • Warum selektierst du das Feld mühselig über dessen name, wo es doch eine ID hat?

        Ja, hast auch Recht, aber die ID ist in diesem Fall eine reine CSS ID, die leider im Quelltext mehrfach vorkommt. :-D

        Dass eine ID dokumentweit eindeutig sein muss, hat Gunnar schon geschrieben. Für mehrere gleichartige Elemente gibt es die Alternative class. Wenn das bereinigt ist, kannst du die im HTML-Quelltext gesetzte ID mit jeder Sprache benutzten. Eine per HTML definierte ID ist keine CSS-ID und keine JavaScript-ID oder was auch immer.

        Tschö, Auge

        --
        Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
        Terry Pratchett, „Gevatter Tod“
  2. Hej Doc_McSky,

    Ich nehme an

    <input autofocus ... />
    

    kommt nicht in Frage?

    Marc

    1. Hey Marc,

      danke, die Idee ist gut und für andere Sachen umsetzbar, aber nicht hier, da sich der Fokus beim laden auch mal ändern kann, aber für andere Sachen kann ich das brauchen, an "autofocus" habe ich noch gar nicht gedacht.

      Gruß, Doc

  3. Idee: Focus auf das Erste Inputfeld setzen. Query also ByTagName. Den Fokus auf inputfelder weiter unten setzen zu wollen macht sowieso keinen wirklichen Sinn. Also das erste was JS findet. pl