Autor Zpráva
baldur
Profil *
Ahoj,
mám kód který funguje v Opeře, Firefoxu, Safari i Chromu, ale v IE opět ne.

Chybu už jsem lokalizoval, jedná se o:
var el = document.getElementById(id);
el.style.display = "block";


Chybu to vyhodí na druhém řádku, jelikož když si vypíšu alertem el, tak mi to v IE vyhodí null, v ostatních prohlížečích standartně že je to html element. Už jsem zde zjistil že bůhví proč IE vrací z getElementById kromě id i name elementu, ale nevím jak mám jinak k tomu elementu přistupovat.

Díky za jakoukoliv radu!
_es
Profil
baldur:
Chybu už jsem lokalizoval
Lokalizoval si ju zle.
Chyba nie je v metóde document.getElementById, ale v (asi) premennej id. Čomu sa rovná? A aký je celý HTML kód, z ktorého JS ten element zisťuje?
Trejpa
Profil
baldur:
Uvedený kód v Internet Exploreru funguje, chybu máš jinde. Dodej odkaz na živou ukázku.
pcmanik
Profil
baldur:
Vies ono je strasne logicke niektoremu prvku priradit id="id"
baldur
Profil *
[#4] pcmanik
O čem to mluvíš, kdyby to tak bylo, tak tam musí být uvozovky! id je název proměnné, ve které je id uložen! Nejdřív se zamysli než budeš osočovat!

[#3] Trejpa
Živou ukázku bohužel nemohu dodat, ale chyba jinde opravdu není, to co potřebuji vyřešit je že je v proměnné el místo aby tam byl odkaz na element, hodnota null. V ostatních prohlížečích je to ok. Obsah proměnné id je ověřen, odkazuje na správný element, i když tam totiž slovně vypíšu název elementu, chyba je stejná.

O této asi chybě je na internetu napsáno mnoho (viz třeba http://diskuse.jakpsatweb.cz/?action=vthread&forum=8&topic=84974 ), i když nevím jestli by to zrovna tady mělo dělat problém. Ještě pro doplnění, ten element, který se snažím získat je iframe, má nastavený pouze id, žádný name.
Chamurappi
Profil
Reaguji na baldura:
chyba jinde opravdu není
Je. Uvedené řádky chybu neobsahují a fungují.

Pokud nedodáš živou ukázku, nemá cenu nad tvým problémem dále přemýšlet. Ani není nad čím.
baldur
Profil *
To co jsem chtěl vědět je jenom zda se někdo s podobným problémem nesetkal, ne řešení konkrétního kódu. Stačí zadat do googlu getelementbyid ie. Stačilo by trochu vstřícnosti, ne jenom hledat kvůli čemu by šlo člověka seřvat.
pcmanik
Profil
baldur:
Nikto ta tu nechce servat(nenapada ma slovensky slusny vyznam :D). Ale v tvojom kode skutocne ziadny problem nieje, a tak ako to bolo uz mnoho krat spomenute, bez zivej ukazky, alebo bez dalsieho kodu ti nemame ako poradit.
baldur
Profil *
Jak už jsem zmínil, chtěl pouze radu od zkušenějších, kteří s problémem možná mají zkušenosti, ukázka tu je pouze ilustrační.
Trejpa
Profil
baldur:
ukázka tu je pouze ilustrační
Ukázka je na nic, funguje.
baldur
Profil *
[#10] Trejpa
Opakuji že je Ilustrační - to znamená, že je pouze pro přiblížení problematiky, ne že je mým cílem ji opravit, protože nemusí žádnou chybu obashovat.
Davex
Profil
baldur:
mám kód který funguje v Opeře, Firefoxu, Safari i Chromu, ale v IE opět ne.
Už jsem se s tímto problémem také setkal.

Už jsem zde zjistil že bůhví proč IE vrací z getElementById kromě id i name elementu, ale nevím jak mám jinak k tomu elementu přistupovat.
Nedávat dvěma různým elementům stejné id a name.
Chamurappi
Profil
Reaguji na baldura:
Jinými slovy je to křoví, abychom si uvědomili, jak může takové volání document.getElementById vypadat, kdybychom to náhodou zapomněli :-) (ovšem křoví uvozené tím, že je v něm chyba)

zda se někdo s podobným problémem nesetkal, ne řešení konkrétního kódu
Jaký druh odpovědi bys chtěl slyšet? Že někdo přikývne, že se někde nějak setkal s nějakým problémem? To ti nějak pomůže?
baldur
Profil *
[#12] Davex
No právě v tom to je, name ten element vůbec nemá. Vytvářím ho dynamicky a přidělil jsem mu jenom id. Není v tom ještě nějaký zádrhel?

[#13] Chamurappi
Nehodlám se tady s nikým hádat. Pokud nechcete pomoct, tak prosím nepřispívejte. Možná že jsem se v prvním příspěvku vyjádřil špatně, ale to je vše.
_es
Profil
baldur:
Živou ukázku bohužel nemohu dodat
A to už prečo?
Chamurappi
Profil
Reaguji na baldura:
name ten element vůbec nemá
To by klidně mít mohl. Problém by byl, když by se před ním nacházel jiný element s takovým name — to by metoda našla ten jiný element (ovšem nevracela by null).

Vytvářím ho dynamicky
Jakým způsobem? (A proč ho pak potřebuješ znovu zpětně dohledávat?)

přidělil jsem mu jenom id
Jakým způsobem?

Pokud nechcete pomoct, tak prosím nepřispívejte.
Chci se dozvědět, co je příčinou popsaného jevu. To by šlo s živou ukázkou mnohem rychleji. Nepovedou-li další dodané informace k řešení, už dál vyzvídat a přispívat nebudu, zase tak moc mě to nezajímá.
Witiko
Profil
baldur:
Pokud nechcete pomoct
Myslím, že s tímhle přístupem brzo skončíš s mrtvým vláknem. Tvůj problém již mohl být vyřešený, kdybys sem zaslal živou ukázku.
baldur
Profil *
[#16] Chamurappi
Vytvářím ho pomocí metody createElement:
var ifr = document.createElement("iframe");
ifr.id = "iframe"+ifr_id;


A potřebuju se k němu zpětně dostat kvůli tomu, že mám na stránce několik těchto rámů a vkládám je v cyklu. U každého pak kontroluji zda už byl načten jeho obsah a poté potřebuji provést nějakou funkci - a právě v ní je potřeba abych znovu získal id toho iframu. Původně jsem to řešil přes ifr.onload = function() { kód (lze uplatnit this.id) } Ale problém tady byl, že to nefungovalo v IE, takže jsem musel přistoupil k eventListeneru a tam už nemůžu uplatnit operátor this.

[#15] _es
Ukázku nemůžu zaslat jednoduše proto, že je to všechno na localhostu a je to propojené s databázemi a dalšími věcmi, které ještě nejsou připraveny na upload na server - tam by nefungovali základní věci, takže by nešlo otestovat funkčnost ani tohohle.
_es
Profil
baldur:
Ukázku nemůžu zaslat jednoduše proto, že je to všechno na localhostu
Čiže štandardná výhovorka číslo 1.

tam by nefungovali základní věci
Netreba, aby fungovali „základné veci“, stačilo aby to problematické, „nefungovalo“ v IE (verziu si tiež nedodal) a „fungovalo“ v iných prehliadačoch. Ak si tvrdil, ako si tú chybu „lokalizoval“ tak ju lokalizuj do tej „živej ukážky“, bez tých „základných vecí“.

ifr.id = "iframe"+ifr_id;
Čiže sa treba v tej „lokalizácii chyby“ dostať ďalej a dodať, čo sa asi tak nachádza v (asi) premennej ifr_id, ako je ten element do dokumentu pridávaný, lebo metóda document.createElement element nepridáva, atď, atď. Teda by bolo najlepšie dodať tú „živú ukážku“ bez výhovoriek.

V iframe je jedna zradná vec a to to, že existuje element iframe v nadradenom dokumente s definovanými rozmermi a pod. a potom existuje objekt window priradený tomu iframe a ten je prístupný napríklad cez kolekciu frames a napríklad udalosť onload je priradená k tomu objektu window. Teda môžeš skúsiť priradiť tomu iframe vlastnosť name a pristupovať k nemu cez frames["názovIframe"] alebo cez poradové číslo frames[poradovČísloIframe].
Witiko
Profil
baldur:
Vytvářím ho pomocí metody createElement
Pak bys ho neměl potřebovat při správném návrhu vůbec hledat pomocí DOM metod. Stačí si uchovat referenci, kterou máš v proměnné ifr. Zahazování informací, které člověk má a jejich zpětné dohledávání, je základním chybou, která pramení z líného návrhu designu.
Maar
Profil *
Zdravím,

mám ten samý problém, na této stránce mi document.getElementById("kalendar") v MSIE vrácí "null". Ale asi 2x za 30 refreshů mi tam ten kalendář, který se má zobrazit, problikne... anebo už mi z toho hrabe... nevíte někdo, co s tím?
Chamurappi
Profil
Reaguji na Maara:
mám ten samý problém
Nemáš, nevíš, v čem spočíval původní problém, nikdo to neví. To, že se tvůj problém týká stejné metody, neznamená, že je stejný. Měl sis založit vlastní vlákno.

document.getElementById("kalendar") v MSIE vrácí "null"
Protože v té době element s id="kalendar" opravdu neexistuje. Na této diskusi jsou desítky vláken týkajících se metody document.getElementById a tohle je paradoxně jedno z mála, kde tato odpověď nezazněla :-)
Maar
Profil *
No právě že tím to nebude, třeba na jiných webovkách vkládám
<script type="text/javascript" src="diskuze.js"></script>

už v hlavičce a až pak někdy v těle stránek
<div id="diskuze"></div>

a jede mi to vpohodě
_es
Profil
Maar:
a jede mi to vpohodě
Tak asi nenastáva pokus o prístup k elementu s id=diskuze, keď ešte neexistuje, na rozdiel od elementu s id=kalendar.
Niektorý kód v <script> môže byť spustený aj neskôr než v čase jeho načítania a vtedy podobný problém nehrozí.
Maar
Profil *
No stejný problém jako můj jsem tu nenašel... Ale zkusil jsem napsat
<div id="kalendar"></div>

a až pak
<script type="text/javascript" src="kalendar.js"></script>

a už to frčí. Dík za radu. Ikdyž pořád nevím, proč když vložím kalendar.js už v hlavičce tak to funguje ale když to vložím před div někde v body tak nee...
_es
Profil
Maar:
proč když vložím kalendar.js už v hlavičce tak to funguje ale když to vložím před div někde v body tak nee...
Chamurappi ti na to už odpovedal, pokús sa čítať pozornejšie. Buď si uprav kód v kalendar.js tak, aby to nebolo závislé od umiestnenia v kóde, alebo to vhodne umiestni.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0