Stef: Tab-Taste funktioniert bei dynamisch erzeugten Feldern nicht!?

Hallo,

ich habe folgendes Problem : Wenn ich mit Javascript innerhalb eins Div neue Textfelder erzeuge und anzeige, dann kann man in/zwischen diesen nicht mehr mit der Tab-Taste navigieren! D.h. der Sprung z.B. zu einem anderen Textfeld funktioniert nicht mehr. Woran kann das liegen? An der Manipulation des DOM vielleicht? Bzw. was kann ich tun damit es wieder klappt?

Wer hat Rat?

Vielen Dank im Voraus
Stef

  1. Hi,

    Wer hat Rat?

    </hilfe/charta.htm#tipps-fuer-fragende>

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Hi,

      Wer hat Rat?

      </hilfe/charta.htm#tipps-fuer-fragende>

      MfG ChrisB

      Hm, ist mir nicht ganz klar! Wenn ich z.B. nach "Tabtaste" im Forum suche, bekomme ich was z.B. zum Thema Tabindex. Da ich den aktuellen(!) Tabindex jedoch nicht kenne, kann ich IMHO auch nicht den korrekten Tabindex setzen, oder irre ich mich?

      Darüberhinaus weiss ich auch nicht welchen Thread du meinst! Bei solchen Antworten würde ich mir wünschen wenn unter dem RTFM Link dann auch noch der entsprechende Thread Link angegeben wird. Denn ein Thread zu diesem Thema Frage ist ja dann offensichtlich auch AUF JEDEN FALL(!) vorhanden.
      Zumindest mach ich das immer so!

      Mfg
      Stef

      1. Hi,

        Darüberhinaus weiss ich auch nicht welchen Thread du meinst!

        Du sollst einfach dein Problem nachvollziehbarer beschreiben ...

        Wo tritt es auf (welche[r] Browser), wie sieht dein (reduzierter) Code aus, Online-Beispiel.

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
        1. Hi,

          Darüberhinaus weiss ich auch nicht welchen Thread du meinst!

          Du sollst einfach dein Problem nachvollziehbarer beschreiben ...

          Wo tritt es auf (welche[r] Browser), wie sieht dein (reduzierter) Code aus, Online-Beispiel.

          MfG ChrisB

          Browser : Firefox 2.x/3.x und IE 5/6/...

          // dbObject ist ein beliebiges DB Element
          var field = genTextField(dbObject);
          // myDiv wurde irgendwann mal erzeugt soll jetzt nur wieder sichtbar gemacht werden.
          // D.h. es sind schon diverse/beliebige Textfelder auf dem Div vorhanden.
          myDiv.appendChild(field)

          // Erzeugt ein Textfeld
          function genTextField(dbObject) {
           var field = document.createElement("input");
           addAttribute(field, "class", "ee");

          // Feldtyp setzen
           var fieldType = document.createAttribute("type");
           fieldType.nodeValue = "text";
           field.setAttributeNode(fieldType);

          // Feldlänge bestimmen und setzen
           var fieldLength = document.createAttribute("maxlength");
           fieldLength.nodeValue = 42;
           field.setAttributeNode(fieldLength);

          field.onchange = formatTextField; // beliebige onChange-Funktion
           field.name = dbObject.id;
           field.id = dbObject.id;
           return field;
          }

          Gruß
          Stef

          1. var field = document.createElement("input");
            addAttribute(field, "class", "ee");

            // Feldtyp setzen
            var fieldType = document.createAttribute("type");
            fieldType.nodeValue = "text";
            field.setAttributeNode(fieldType);

            // Feldlänge bestimmen und setzen
            var fieldLength = document.createAttribute("maxlength");
            fieldLength.nodeValue = 42;
            field.setAttributeNode(fieldLength);

            field.onchange = formatTextField; // beliebige onChange-Funktion
            field.name = dbObject.id;
            field.id = dbObject.id;

            Das einzige, was mir daran auffällt, ist, dass du ganze drei (!) verschiedene Techniken verwendest, um Attributwerte zu setzen. 1. Deine Helferfunktion addAttribute, 2. createAttribute/setAttributeNode, 3. element.attribut = "wert". Beschränke dich jeweils auf letztere.

            Ansonsten wäre eine reduzierte Beispielseite ganz hilfreich, weil ich in obigem abstrakten Quellcode keinen Fehler sehe, der zum besagten Verhalten führen könnte.

            Mathias

            1. var field = document.createElement("input");
              addAttribute(field, "class", "ee");

              // Feldtyp setzen
              var fieldType = document.createAttribute("type");
              fieldType.nodeValue = "text";
              field.setAttributeNode(fieldType);

              // Feldlänge bestimmen und setzen
              var fieldLength = document.createAttribute("maxlength");
              fieldLength.nodeValue = 42;
              field.setAttributeNode(fieldLength);

              field.onchange = formatTextField; // beliebige onChange-Funktion
              field.name = dbObject.id;
              field.id = dbObject.id;

              Das einzige, was mir daran auffällt, ist, dass du ganze drei (!) verschiedene Techniken verwendest, um Attributwerte zu setzen. 1. Deine Helferfunktion addAttribute, 2. createAttribute/setAttributeNode, 3. element.attribut = "wert". Beschränke dich jeweils auf letztere.

              Ansonsten wäre eine reduzierte Beispielseite ganz hilfreich, weil ich in obigem abstrakten Quellcode keinen Fehler sehe, der zum besagten Verhalten führen könnte.

              Mathias

              Das ist es ja eben! Fehler sind da ja eigentlich keine, aber ich vermute daß beim dynamischen Hinzufügen von Elementen am DOM der Browser n Problem hat mit dem Tabindex, oder sowas! Wenn die Seite serverseitig oder vor dem Rendering des Browsers aufgebaut wird und nicht dynamisch geändert wird, ist alles gut. Wenn via Javascript Elemente während der Anzeige hinzugefügt werden, klappts nicht mehr.

              1. Bevor wir weiter mutmaßen, lade doch bitte mal eine reduzierte Beispielseite hoch, mit der sich das Problem reproduzieren lässt. Dann werden wir den Fehler sicher schnell finden können.

                Mathias

          2. Hallo,

            Browser : Firefox 2.x/3.x und IE 5/6/...

            // dbObject ist ein beliebiges DB Element
            var field = genTextField(dbObject);
            // myDiv wurde irgendwann mal erzeugt soll jetzt nur wieder sichtbar gemacht werden.
            // D.h. es sind schon diverse/beliebige Textfelder auf dem Div vorhanden.
            myDiv.appendChild(field)

            // Erzeugt ein Textfeld
            function genTextField(dbObject) {
            var field = document.createElement("input");
            addAttribute(field, "class", "ee");

            // Feldtyp setzen
            var fieldType = document.createAttribute("type");
            fieldType.nodeValue = "text";
            field.setAttributeNode(fieldType);

            // Feldlänge bestimmen und setzen
            var fieldLength = document.createAttribute("maxlength");
            fieldLength.nodeValue = 42;
            field.setAttributeNode(fieldLength);

            field.onchange = formatTextField; // beliebige onChange-Funktion
            field.name = dbObject.id;
            field.id = dbObject.id;
            return field;
            }

            wenn du je wieder so etwas machst, dann rate ich dir, stets die gleiche variante zum setzen von attributen zu verwenden...

            MfG. Christoph Ludwig

            --
            Wo die Sprache aufhört, fängt die Musik an...
            Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
            Go to this
            1. [latex]Mae  govannen![/latex]

              wenn du je wieder so etwas machst, dann rate ich dir, stets die gleiche variante zum setzen von attributen zu verwenden...

              Zum zweiten Mal heute .. Mathias hat die gleiche Antwort bereits ~20 min vorher gegeben. Ich ernenne dich hiermit feierlich zum NvD (Nachplapperer vom Dienst) 11/08. Die Urkunde und Pokal werden dir zu gegebener Zeit zugestellt; das Preisgeld wird selfhtml eV zugewiesen.

              Tusch!

              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:?
              Mein Selfhtml-Kram
              1. Hallo,

                Zum zweiten Mal heute .. Mathias hat die gleiche Antwort bereits ~20 min vorher gegeben. Ich ernenne dich hiermit feierlich zum NvD (Nachplapperer vom Dienst) 11/08. Die Urkunde und Pokal werden dir zu gegebener Zeit zugestellt; das Preisgeld wird selfhtml eV zugewiesen.

                danke für die urkunde ;)
                nene ... aber das hab ich ni gewusst, da die rechner in der schule scheiße langsam sind ... deswegen hab ich nur das erste posting gesehen.
                großes sorry dafür!

                also nur eine wiederholung ^^

                MfG. Christoph Ludwig

                --
                Wo die Sprache aufhört, fängt die Musik an...
                Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
                Go to this