Tab-Taste funktioniert bei dynamisch erzeugten Feldern nicht!?
Stef
- javascript
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
Hi,
Wer hat Rat?
</hilfe/charta.htm#tipps-fuer-fragende>
MfG ChrisB
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
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
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
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
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.
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
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
[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ü,
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