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.
var elem = document.createElement("option");  
	elem.text = "akarmi";
	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.
var y=document.getElementById("valami");
	var option=document.createElement("option");
	option.text= "akarmi";
try
  {
  y.add(option,y.options[null]);
  }
catch (e)
  {
  y.add(option,null);
  }
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:

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)
var elem = document.createElement("option");  
	elem.appendChild(document.createTextNode("akarmi"));  
	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:

var szulo = document.getElementById("valami");
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 !