+ Antworten
Ergebnis 1 bis 3 von 3

Thema: Options hinzufügen zum Select-Feld mit appendChild() - IE streikt !!!

  1. #1
    TP-Senior Presssack macht alles soweit korrekt
    Registriert seit
    Jan 2003
    Ort
    Aschaffenburg
    Beiträge
    106

    Options hinzufügen zum Select-Feld mit appendChild() - IE streikt !!!

    Hallo zusammen,

    es geht um Folgendes:

    Ich habe 2 Selectfelder, wobei das 2. anhängig ist von der Auswahl des 1. Das ganze wurde über Ajax gelöst und funktioniert im FF hervorragend (dank theo).
    Nur im IE (6-er) macht er garnix - es wird einzig und allein das Select-Feld angezeigt, aber die options kommen einfach nicht rein.

    Das Skript sieht folgendermaßen aus:

    HTML-Code:
    <select onChange="AjaxRequest();" style="margin-top:5px;" name="semester" id="semester"></select>
    
    <div style="margin-top:5px;" id="fachnotice">Bitte erst Semester/Wahlfach ausw&auml;hlen!</div>
    <select name="fach" id="fachselect" style="margin-top:5px;display:none;"></select>
    Code:
    function AjaxRequest() {
          var SemesterNum = document.getElementById("semester").value;
          var FachFeld = document.getElementById("fachselect");
          var FachNotice = document.getElementById("fachnotice");
    
          var ajax1 = new ajaxRequest("/inc/xmlcreator.inc.php?number="+SemesterNum);
      			ajax1.onSuccess = function(txt,xml){
      			var linksNode = xml.firstChild.childNodes;
    
            while(FachFeld.hasChildNodes())
            {
                 FachFeld.removeChild(FachFeld.firstChild);
            } 
    
    for(var x=0; x<linksNode.length; x++){  
                    var knoten = document.createElement("option"); 
                    var text = document.createTextNode(linksNode[x].firstChild.nodeValue); 
                    knoten.value = linksNode[x].getAttribute('url').firstChild; 
                    knoten.appendChild(text); 
                    FachFeld.appendChild(knoten);
     } 
    /* 				for(var x=0; x<linksNode.length; x++){
              var knoten = document.createElement("option");  
              knoten.innerHTML = linksNode[x].firstChild.nodeValue;  
              knoten.value = linksNode[x].getAttribute('url').firstChild;  
              FachFeld.appendChild(knoten);  
    				} */
    			}
          ajax1.doRequest();
          
                    if (SemesterNum==0) {
                FachFeld.style.display='none';
                FachNotice.style.display='block';
              }
              else {
                FachFeld.style.display='block';
                FachNotice.style.display='none';
              }
      }
    Es werden die Daten mit der PHP Datei erstellt und abgerufen. Danach werden erst einmal alle bestehenden Option-Felder gelöscht (da bei einer Änderung des 1. Selectfeldes die Werte, welche zur vorherigen Auswahl gehören bestehen bleiben würden)
    Und danach werden in einer Schleife die Options angehängt. Es gibt hier 2 Schleifen, ich hatte die auskommentierte vorher mal versucht (ging im FF, IE nicht) und theo hat mit die andere mal geschrieben (ging ebenso im FF, aber IE nicht).

    Vielleicht kann mir einer von euch weiterhelfen?

    Wäre sehr nett...

    Gruß
    Presssack

  2. #2
    TP-Senior Presssack macht alles soweit korrekt
    Registriert seit
    Jan 2003
    Ort
    Aschaffenburg
    Beiträge
    106
    Mein nächste Versuch war das hier als Schleife um in den IE die neuen OptionFelder hinzuzufügen.

    Code:
    for(var x=0; x<linksNode.length; x++){  
      NeuerEintrag = new Option(linksNode[x].firstChild.nodeValue, linksNode[x].attributes[0].nodeValue, false, false);
      FachFeld.options[FachFeld.length] = NeuerEintrag;
                
     }
    geht aber auch nicht... - in einem Testfile bei dem ich onLoad ein Feld hinzufüge funktioniert es im IE und im FF... nur bei dem speziellen Script hier klappt garnix

  3. #3
    TP-Senior Presssack macht alles soweit korrekt
    Registriert seit
    Jan 2003
    Ort
    Aschaffenburg
    Beiträge
    106
    Fehler BESEITIGT !!!

    Also das Problem lag nicht unbedingt bei dem appendChild(). Es gibt zwar einige Probleme mit innerHtml und appendChild im IE - dem zufolge was google ausspuckt, aber bei mir lag das Problem ganz wo anders.

    Bei mir kam es nicht mal zum durchlaufen der Schleife, da IE mit dem durchforsten des DOM nicht klar kam - ich hatte vorher das hier verwendet um in der XML Datei zu dem richtigen Knoten zu kommen:

    Code:
    var linksNode = xml.firstChild.childNodes;
    // hat im FF funktioniert aber nicht im IE
    var linksNode =  xml.getElementsByTagName("tagname")[0].childNodes; 
    // nimmt der FF und der IE an und versteht darauf hin auch das 
    linksNode.length
    Die XML Datei sieht bei diesem Beispiel ungefähr so aus:

    HTML-Code:
    <tagname>
    <link url="1">Eintrag 1</link>
    <link url="2">Eintrag 2</link>
    <link url="3">Eintrag 3</link>
    </tagname>

    Das Hinzufügen der Option-Objekte kann man am elegantesten wie folgt lösen:
    Code:
          var Feld = document.getElementById("selectfeld");
            for(var x=0; x<linksNode.length; x++){  
                NeuerEintrag = new Option(linksNode[x].firstChild.nodeValue, linksNode[x].attributes[0].nodeValue, false, false);
                Feld.options[Feld.length] = NeuerEintrag;         
             }
    Wie bei selfhtml beschrieben
    http://de.selfhtml.org/javascript/ob...#neue_elemente

    Das also der Fehler lag schon vor der Schleife, da hätte mir wohl keiner helfen können, da ich ja nur die DOM-Struktur kannte bzw. hätte kennen müssen

    Gruß
    Presssack

+ Antworten

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51