Dynamische Inputs und deren Name
Jürgen Berkemeier
- javascript
Hallo,
mit folgendem Script erzeuge ich dynamisch ein Inputfeld:
...
<script type="text/javascript">
function start() {
var ipt = document.createElement("input");
ipt.size=2; //geht in IE, MOZ, Opera
ipt.name="x_y_z"; //geht in MOZ, Opara
ipt.onclick="alert(this.name)"; //geht in Opera
ipt.value="F4"; //geht in IE, MOZ, Opera
document.getElementsByName("frm")[0].appendChild(ipt) ;
if (document.frm.x_y_z) alert(document.frm.x_y_z.value);
}
</script>
...
<body onload="start()">
<form name="frm" action="" method="" target="">
<input type="Text" name="i_n_p" value="F1" size="" maxlength="" onclick="alert(this.name)">
</form>
...
leider werden nicht alle Attribute in allen Browsern dynamisch gesetzt. Siehe hierzu die Kommentare im Script. Wichtig sind für mich size, value und name. Und gerade das name-Attribut wird im IE nicht gesetzt. Der alert kommt nur im Moz und im Opera. Mit createAttribute und setAttributeNode habe ich es auch schon versucht, ohne Erfolg.
Wie kann man mit Javascript den Namen eines inputs setzen?
Gruß, Jürgen
Hi,
Und gerade das name-Attribut wird im IE nicht gesetzt. Der alert kommt nur im Moz und im Opera.
Das könnte aber auch heißen, daß das onclick-Attribut im IE nicht gesetzt wurde...
cu,
Andreas
Hallo Andreas,
Und gerade das name-Attribut wird im IE nicht gesetzt. Der alert kommt nur im Moz und im Opera.
Das könnte aber auch heißen, daß das onclick-Attribut im IE nicht gesetzt wurde...
hier war der alert im Script-Teil, nicht der oncklick gemeint. Hiermit prüfe ich, ob ein Element mit diesem Namen existiert.
Gruß, Jürgen
Hi,
leider werden nicht alle Attribute in allen Browsern dynamisch gesetzt.
nein, im Gegensatz zum Einsatz von element.setAttribute() - was zumindest nicht mehr einschränkt, als es bei document.createElement() der Fall ist, welches Du keinesfalls ungeprüft verwenden darfst.
Mit createAttribute und setAttributeNode habe ich es auch schon versucht, ohne Erfolg.
Beides zu komplex.
Cheatah
Hallo Cheatah,
leider habe ich Deine Antwort nicht verstanden.
Wie kann ich denn jetzt das name-Attribut setzen?
Gruß, Jürgen
Hi,
leider habe ich Deine Antwort nicht verstanden.
das ist weder ungewöhnlich für meine Antworten, noch ein unbedingt endgültiger Zustand.
Wie kann ich denn jetzt das name-Attribut setzen?
Du hast es bereits richtig versucht, nur mit der falschen Methode. Die bessere habe ich genannt.
Cheatah
Hallo Cheatah,
ich habe es jetzt mit
ipt.setAttribute("name","x_y_z");
versucht. Klappt auch nicht. Offensichtlich kann der IE das nicht. Thomas hat ja schon einen Workaround angegeben, aber ich brauche den Namen nur, um mit document.formularname.elementname darauf zugreifen zu können. Zum Glück geht es auch mit getElementsByTagName.
Danke für Deine Hilfe.
Gruß, Jürgen
Hallo,
ipt.onclick="alert(this.name)"; //geht in Opera
...
Der alert kommt nur im Moz und im Opera.
Probiere es mit:
ipt.onclick=function(){alert(this.name)};
MfG, Thomas
Hallo Thomas,
Probiere es mit:
ipt.onclick=function(){alert(this.name)};
hab ich gemacht, bringt aber keine Änderung. Der onclick ist aber auch nicht wichtig für mich, der ist nur zum Debuggen gedacht.
Gruß, Jürgen
Hallo,
ipt.onclick=function(){alert(this.name)};
hab ich gemacht, bringt aber keine Änderung. Der onclick ist aber auch nicht wichtig für mich, der ist nur zum Debuggen gedacht.
Naja, immerhin kommt damit die Ausgabe von this.name im IE zustande, aber das Attribut selbst ist nicht gesetzt:
Test mit:
alert(document.getElementsByName("frm")[0].innerHTML);
Auch das "alte IE-Hausmittel" dritter Parameter bei setAttribute() hilft hier nicht:
inp.setAttribute("name","x_y_z",true);
Als Workaround faellt mir nur noch ein, innerHTML zu verwenden. Zumindest Mozilla-Derivate, Opera 7.x und IE verstehen das:
document.getElementsByName("frm")[0].innerHTML+='<input size="2" name="x_y_z" value="F4" onclick="alert(this.name)">';
MfG, Thomas
Hallo Thomas,
Ich brauche den Namen nur, um mit document.formularname.elementname darauf zugreifen zu können. Zum Glück geht es auch mit getElementsByTagName.
Danke für Deine Hilfe.
Gruß, Jürgen
Hallo,
Ich brauche den Namen nur, um mit document.formularname.elementname darauf zugreifen zu können. Zum Glück geht es auch mit getElementsByTagName.
Wenn es nur um den Zugriff geht, kaeme auch das Erzeugen von IDs in Betracht:
ipt.setAttribute("id","x_y_z");
...
if (document.getElementById("x_y_z"))alert(document.getElementById("x_y_z").value);
Klappt im IE 5.5 und 6.0.
MfG, Thomas