Aline: Nachtrag: Option unterhalb von Optgroup

Beitrag lesen

Hi,

auch wenn ich es so versuche, ändert sich leider nichts am Verhalten

var optGrps = opt.getElementsByTagName("optgroup");

var newOption = document.createElement("option");
newOption.value = "Test1";
newOption.text = "Test1";
for (var i = 0; i < optGrps.length; i++){
  if(optGrps[i].label == "Test"){
    optGrps[i].appendChild(newOption);
  }
}


>   
> > Internet Explorer 7.0.5730.13 (Windows) und Internet Explorer 8.0.6001.18702 (Windows): die Elemente werden an der richtigen Stelle eingefügt, jedoch ohne Text  
>   
> Der IE ist immer leicht bitchy beim Erstellen neuer Formularelemente.  
>   
> Wenn du  
> > newOption.text = "Test1";  
> durch  
> `newOption.appendChild(document.createTextNode("Test1"));`{:.language-javascript}  
> ersetzt, bekommst du auch im IE eine Option mit dem gewünschten Textinhalt.  
>   
>   
> > Opera 9.64 (Linux und Windows): hat das beschriebene Verhalten  
>   
> Auch lustig - eine Kontrollausgabe des innerHTML der OPTGROUP direkt nach dem appendChild zeigt an, dass die neue Option korrekt dort eingehängt wurde - und trotzdem zeigt er sie im nächsten OPTGROUP-Element \*an\*.  
>   
> Um das zu beheben, kannst du hinter der appendChild-Zeile noch  
> `if(window.opera) optGrps[i].innerHTML = optGrps[i].innerHTML;`{:.language-javascript}  
> einfügen - einfach dem OPTGROUP-Element, dem die neue Option gerade angehängt wurde, sein eigenes innerHTML noch mal überbraten. Dann zeigt auch Opera die Option in der "richtigen" OPTGROUP an, und nicht mehr in der nachfolgenden.  
>   
> Natürlich kein besonders schöner Workaround, aber was will man machen :-)  
> Musst nur aufpassen - eventuell gesetzte Eventhandler o.ä. gehen dir verloren, wenn du innerHTML überschreibst. (Aber die nutzt man auf OPTION ja generell eher selten.)  
  
  
super vielen Dank!  
  
jedoch verhindert der Workaround von Opera, dass das selektieren mit "newOption.selected = true;" nicht funktioniert.  
  
Lasse ich den Workaround weg, wird der Eintrag selektiert.  
Hast du dafür auch noch ein Tipp?  
  
Aline