onChange Event aus via DOM erzeugtem select/option
Dietmar
- html
Hallo Liste,
ich habe via dom eine select / option Liste aufgebaut. Setze beim Select ein attribute für einen onChange Event, aber beim IE wird dieser nicht gefeuert.
Der Code sieht ca. so aus:
var nation = document.createElement("select");
nation.setAttribute("id","natchoose");
nation.setAttribute("name","nation");
nation.setAttribute("onChange","change_nation()");
document.getElementById("nation").appendChild(nation);
var nations = xmlNations.getElementsByTagName('Nation');
document.getElementById("natchoose").appendChild(document.createElement("option"));
for (var i=0; i<nations.length; i++) {
var opt = document.createElement("option");
opt.value = nations.item(i).getAttribute("code");
opt.appendChild(document.createTextNode(nations.item(i).firstChild.data));
document.getElementById("natchoose").appendChild(opt);
}
Kurz: ich baue mir das select auf. Setze name und id. Dann das Event. Weiters wird ein XML Dokument zum befüllen der Optionsliste verwendet.
Die Krücke über den TextNode wird wegen dem IE benötigt, da moit opt.text der Text nicht zur Anzeige kommt.
Beim FF geht das alles natürlich wie erwartet.
Wenn jemand eine Idee oder einen Tip hat wäre ich dankbar.
lg Dietmar
Hello out there!
aber beim IE wird dieser nicht gefeuert.
Der IE hat Probleme mit setAttribute; dieses ist aber gar nicht nötig:
Der Code sieht ca. so aus:
var nation = document.createElement("select");
nation.setAttribute("id","natchoose");
nation.setAttribute("name","nation");
nation.setAttribute("onChange","change_nation()");
Sollte so aussehen:
var nation = document.createElement("select");
nation.id = "natchoose";
nation.name = "nation";
nation.onchange = change_nation;
See ya up the road,
Gunnar
Hello out there!
aber beim IE wird dieser nicht gefeuert.
Der IE hat Probleme mit setAttribute; dieses ist aber gar nicht nötig:
Der Code sieht ca. so aus:
var nation = document.createElement("select");
nation.setAttribute("id","natchoose");
nation.setAttribute("name","nation");
nation.setAttribute("onChange","change_nation()");Sollte so aussehen:
var nation = document.createElement("select");
nation.id = "natchoose";
nation.name = "nation";
nation.onchange = change_nation;
>
> See ya up the road,
> Gunnar
Hallo Gunnar,
danke für den wertvollen Tip!
Der Event geht jetzt lt. js debugger ist die id bei IE jetzt auch gesetzt nur der Name macht noch seine Probleme. lt. debugger ist der name nicht gesetzt als auch weiter im code, wenn ich mit dem Name zugreife schmeißt es mit einen Fehler. Nur IE, FF ok.
Bin für jeden Tip dankbar.
lg Dietmar
Der Event geht jetzt lt. js debugger ist die id bei IE jetzt auch gesetzt nur der Name macht noch seine Probleme. lt. debugger ist der name nicht gesetzt als auch weiter im code, wenn ich mit dem Name zugreife schmeißt es mit einen Fehler. Nur IE, FF ok.
vielleicht sprichst du in deiner "change_nation()"-Funktion das select-Element mit Namen an?
etwa so document.forms["form_name"].nation ?
dann dürfte der IE auch dieses Namen-Problem http://msdn2.microsoft.com/en-us/library/ms534184.aspx
haben:
und müsstest für den IE eine Weiche bauen
var nation;
if (IE) {
nation = document.createElement("<select name='nation'></select>");
}
else {
nation = document.createElement("select");
nation.name="nation";
}
nation.id="natchoose";
nation.onchange=change_nation;
// ...
die Optionen würde ich konventionell einhängen, den von dir beschriebenen Effekt, habe ich bisher nicht beobachtet.
// ...
for (var i=0; i<nations.length; i++) {
var opt=new Option();
opt.text="...."
opt.value="...";
nation.options[nation.options.length]=opt;
}
Gruß planB
Hallo planB und Gunnar,
vielen Danke für die Hilfe. Das Problem ist gelößt.
lg Dietmar
noch ein Nachtrag
und müsstest für den IE eine Weiche bauen
if (IE) {
....
besser wendet man "conditional compilation" an, wie hier
IE akzeptiert name Attribute nicht beschrieben.