ugrás a tartalomhoz

getElementById.appendChild nem megy IE7/7 alatt

Blackfriar · 2012. Ápr. 17. (K), 11.38
Sziasztok !
Az alábbi kód nem működik IE6/7 alatt, azaz a "valami" id-jű select-be nem ír semmit.
  1. var elem = document.createElement("option");    
  2.     elem.text = "akarmi";  
  3.     document.getElementById("valami").appendChild(elem);  
Valami ötlet ?
 
1

De működik.

Hidvégi Gábor · 2012. Ápr. 17. (K), 11.58
Kipróbáltam IE7 alatt, és azt csinálja, amit várnánk tőle.
2

most nézem

Blackfriar · 2012. Ápr. 17. (K), 12.18
Most nézem csak, hogy IE8 alatt nem megy. (idáig azt hittem, korábbi IE verzión próbálom)
Amúgy minden más böngészőn megy, de IE8 alatt üres marad a select.
Érdekes viszont, hogy hibajelzés sincs az IE-ben.
3

Semmi sem indokol hibát

Hidvégi Gábor · 2012. Ápr. 17. (K), 12.32
Segítek: az option elemnek máshogy is meg lehet adni a feliratát.
4

biztos igazad van, csak...

Blackfriar · 2012. Ápr. 17. (K), 12.35
Biztos igazad van, csak az az érdekes, hogy az alábbi módon működik mindenhol.
Értéket nem akarok adni egyik option elemnek sem, mert egy függvénnyel lekezelem a this.selectedIndex-et.
  1. var y=document.getElementById("valami");  
  2.     var option=document.createElement("option");  
  3.     option.text= "akarmi";  
  4. try  
  5.   {  
  6.   y.add(option,y.options[null]);  
  7.   }  
  8. catch (e)  
  9.   {  
  10.   y.add(option,null);  
  11.   }  
6

További segítség

Hidvégi Gábor · 2012. Ápr. 17. (K), 12.59
Pl. Firebugban nézd meg a DOM fában egy tetszőleges <select> elem tartalmát. Ebből rá fogsz jönni, hogyan oldhatod meg a problémát.
10

Én setAttribute-al állnék

inf · 2012. Ápr. 17. (K), 14.50
Én setAttribute-al állnék neki, van, ami csak úgy működik...
11

Felesleges túlbonyolítani,

Hidvégi Gábor · 2012. Ápr. 17. (K), 15.06
Felesleges túlbonyolítani, lásd 9-es hozzászólás. Egyébként setAttribute-tal sem működik, viszonylag (Microsofttól el nem várható módon) logikusan.
5

Az MSDN HTMLOptionElement

kuka · 2012. Ápr. 17. (K), 12.37
Az MSDN HTMLOptionElement Prototype alapján annak működnie kell:
AttributePropertyDescription
textSets or retrieves the text string specified by the option tag.
Ugyanott a text property példát is tartalmaz, bár nem pont ilyen szövegkörnyezetben.

Én inkább arra tippelek, hogy a szülőnek kiszemelt #valami elemmel van gond. De persze ezt nincs hogy megtudjuk a szűkszavú példakódból.
7

Az MSDN-nel az a baj, hogy

Hidvégi Gábor · 2012. Ápr. 17. (K), 13.26
Az MSDN-nel az a baj, hogy nem írja, hanyas verziótól érvényes. Mivel nyolcassal nem működik, ezért gondolom kilences kell hozzá.

Régi böngészőknél, ha létrehozol egy 'option' elemet DOM függvényekkel, nem ugyanaz, mintha HTMLOptionElement-et készítenél.
8

Erre én is gondoltam, de

kuka · 2012. Ápr. 17. (K), 13.46
Erre én is gondoltam, de máshol ahol verzióhoz kötött a dolog, ott jelzik. Például placeholder attribute | placeholder property. Na de inkább neked hiszek mint nekik.
9

Alternatív megoldás

gabesz666 · 2012. Ápr. 17. (K), 14.00
A problémának nem néztem utána, de javasolnék egy alternatív megoldást:
  1. document.getElementById("valami").innerHTML += "<option value='...'>...</option>";  
12

Próbálj meg TextNode-al

Karvaly84 · 2012. Ápr. 17. (K), 18.07
Próbálj meg TextNode-al operálni...
14

ja

Blackfriar · 2012. Ápr. 17. (K), 18.52
Ja, van egy ilyen lehetőség is, csak ezt most nem tudom IE8 alatt tesztelni:
(azt viszont látom, hogy IE9 alatt nem működik)
  1. var elem = document.createElement("option");    
  2.     elem.appendChild(document.createTextNode("akarmi"));    
  3.     document.getElementById("valami").appendChild(elem);  
Amúgy a 9. hsz alatti megoldás sem működik nekem IE9 alatt (már kezdek becsavarodni).
Csak azt magyarázzátok el, a 4. hsz alatti kód miért működik IE8 alatt is ?
13

Azért én kipróbálnám az ősi

kuka · 2012. Ápr. 17. (K), 18.43
Azért én kipróbálnám az ősi módszert is, ami emlékeim szerint Explorer 4-ben is
működött:
  1. var szulo = document.getElementById("valami");  
  2. szulo.options[szulo.options.length]=new Option("akarmi");  
15

na kicsit próbálgattam, és

Karvaly84 · 2012. Ápr. 18. (Sze), 07.50
na kicsit próbálgattam, és számomra se tiszta, hogy mért ilyen nagy a kavarodás de a következőket vontam le:

Ha az option elemet a createElement metódussal hozom létre akkor a option.text = "érték" hatástalan lesz ellenben az option.appendChild(document.createTextNode("érték")) viszont működik.

Ha az option elemet a Option konstruktorral hozom létre akkor a select elem add metódusát használva lehet hozzá adni az appendChild nem jó:

select.add(option);
16

köszönet

Blackfriar · 2012. Ápr. 18. (Sze), 19.42
Köszönet neked, hogy ennyit fáradtál a problémámmal. Nem mertem leírni, de az volt az érzésem, megint darázsfészekbe nyúltam. Valahogy vonzom ezeket a zűrös dolgokat.

Mégegyszer hálás köszönet minden hozzászólónak a tanácsokért, gondolatébresztő segítségért !