Dietmar: onChange Event aus via DOM erzeugtem select/option

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

  1. 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

    --
    „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
    1. 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
      
      1. 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

        1. Hallo planB und Gunnar,

          vielen Danke für die Hilfe. Das Problem ist gelößt.

          lg Dietmar

        2. 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.