Mika: focus() auf dynamische Elemente setzen

Hallo Zusammen,

wenn ich mit der Funktion "focus()" den Cursor in ein bestimmtes
Textfeld, welches vorher dynamisch erzeugt wurde setzen will,
funktioniert das nicht.

ich habe es mit:

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

versucht.

Leider funktioniert es so nicht. Ist es grundsätzlich möglich den Cursor per focus(); in ein dynamisch erzeugtes Textfeld zu setzen?
Und wenn ja wie?

Gruß

Mika

  1. Hallo,

    wenn ich mit der Funktion "focus()" den Cursor in ein bestimmtes
    Textfeld, welches vorher dynamisch erzeugt wurde setzen will,
    funktioniert das nicht.

    Gibt es eine Fehlermeldung oder wird das Textfeld einfach nur nicht fokussiert?

    Normalerweise geht das ohne Probleme [Beispiel].

    mfg. Daniel

    1. Hi,

      eine Fehlermeldung wird nicht angezeigt, das Feld wird einfach nicht
      fokkusiert.

      Ich habe es aber auch schon so wie in deinem Beispiel versucht, doch leider ohne Erfolg.

      Und als ich dein Beispiel das erstmal aufgerufen habe kam zunächst eine Fehlermeldung. Erst nach einem Neuladen der Seite hat es funktioniert. Allerdings kann ich diese Fehlermeldung nicht mehr reproduzieren.

      Hast jemand vielleicht eine Idee woran es liegen könnte das es bei mir nicht funktioniert???

      Gruß Mika

      1. Hello,

        Hast jemand vielleicht eine Idee woran es liegen könnte das es bei mir nicht funktioniert???

        1. du versuchst focus zu setzen, obwohl das Element noch nicht im Dokumentbaum eingehängt ist
        2. du hast mehrere Elemente mit der ID.

        MfG
        Rouven

        --
        -------------------
        Unser Problem ist, dass wir eine Demokratie entwickelt haben, was nicht immer der richtige Weg ist  --  Bernie Ecclestone zu den lästigen Diskussionen um Regeländerungen in der Formel 1
        1. Hallo,

          1. du versuchst focus zu setzen, obwohl das Element noch nicht im Dokumentbaum eingehängt ist

          nein, daran kann es nicht liegen, da ich denn focus erst setze nachdem das Element erzuegt wurde.

          zum Beispiel:

          var NewTextField = document.createElement("input");
          NewTextField.type = "text";
          document.body.appendChild("NewTextField");
          NewTextField.focus();

          rein theoretisch müsste das ja richtig sein

          1. du hast mehrere Elemente mit der ID.

          ich habe folgende Funktion:

          function check_field_artnr(){
            if(this.value.length != 6){
              alert("Eine Artikelnummer muss aus 6 Ziffern bestehen!");
              this.focus();
          }

          und folgendes Element, das erstellt wird und die Funktion
          per Eventhandler "onchange" aufruft...

          newTextField = document.createElement("input");
          newTextField.type = "text";
          newTextField.style.width = "48px";
          newTextField.maxLength = "6";
          newTextField.id = "artnr"+y;
          newTextField.name = "artikelnummer"+y;
          newTextField.onchange = check_field_artnr;
          document.getElementById("tableCol"+y+x).appendChild(newTextField);

          wenn ich einem Element eine ID vergebe, dann achte ich darauf,
          dass diese ID eindeutig ist...

          Was ist daran falsch?

          Gruß
          Mika

          1. ich habe folgende Funktion:

            function check_field_artnr(){
              if(this.value.length != 6){
                alert("Eine Artikelnummer muss aus 6 Ziffern bestehen!");
                this.focus();
            }

            Ich nehme an die fehlende Klammer existiert im Orginal.

            Das Problem hier dürfte ein Bug sein, FF setzt leider nicht richitg den focus wenn vorher ein alert() kam.
            du musst hier einen kurzen Timeout einbauen.

            var self = this;  
            window.setTimeout( function() { self.focus();}, 10);
            

            Struppi.

            1. Hello,

              Das Problem hier dürfte ein Bug sein, FF setzt leider nicht richitg den focus wenn vorher ein alert() kam.
              du musst hier einen kurzen Timeout einbauen.

              oh Gott wie schlecht...Kann man irgendwo die dümmsten und schwer zu findenden Softwarebugs nominieren?? *Notiz im Hinterkopf mach, falls ich mal über das Problem stolpere*

              MfG
              Rouven

              --
              -------------------
              When the only tool you've got is a hammer, all problems start to look like nails.
  2. Hi,

    Ist es grundsätzlich möglich den Cursor per focus(); in ein dynamisch erzeugtes Textfeld zu setzen?
    Und wenn ja wie?

    so wie es mein Vorgänger gepostet hat. Und in Abwandlung, wenn es über die ID gehen soll:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
    <head>
    <script type="text/javascript">
    function mach_txt(){
        var txt =  document.createElement("textarea");
        txt.id  =  "mytxt";
        document.body.appendChild(txt);
    }
    </script>
    </head>
    <body>
    <p onclick="mach_txt()">Mach Textarea</p>
    <p onclick="document.getElementById('mytxt').focus()">Setze focus</p>
    </body>
    </html>

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
  3. wenn ich mit der Funktion "focus()" den Cursor in ein bestimmtes
    Textfeld, welches vorher dynamisch erzeugt wurde setzen will,
    funktioniert das nicht.

    doch das funktioniert.

    Und wenn ja wie?

    mit der Methode focus()

    noch was:
    "funktioniert nicht" ist keine Fehlerbeschreibung und "ich habe versucht" nur eine mäßige Beschreibung dessen was du machst. Jetzt muss jeder, der dir helfen will sich ein Beispiel aus den finger saugen um dir zu zeigen das es geht

    Das hier geht einwandfrei

    function add(form) {  
    var el = document.createElement('input');  
    form.appendChild(el);  
    el.focus();  
    }
    

    <input type="button" name="vorgabe" value="add" onclick="add(this.form)">

    Struppi.