Autor | Zpráva | ||
---|---|---|---|
baldur Profil * |
#1 · Zasláno: 30. 6. 2011, 19:17:10
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 |
#2 · Zasláno: 30. 6. 2011, 19:30:32 · Upravil/a: _es
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 |
#3 · Zasláno: 30. 6. 2011, 19:31:33
baldur:
Uvedený kód v Internet Exploreru funguje, chybu máš jinde. Dodej odkaz na živou ukázku. |
||
pcmanik Profil |
#4 · Zasláno: 30. 6. 2011, 19:49:37
baldur:
Vies ono je strasne logicke niektoremu prvku priradit id="id" |
||
baldur Profil * |
#5 · Zasláno: 30. 6. 2011, 20:23:36
[#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 |
#6 · Zasláno: 30. 6. 2011, 20:27:29
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 * |
#7 · Zasláno: 30. 6. 2011, 20:35:32
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 |
#8 · Zasláno: 30. 6. 2011, 20:38:20
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 * |
#9 · Zasláno: 30. 6. 2011, 20:44:30
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 |
#10 · Zasláno: 30. 6. 2011, 21:01:56
|
||
baldur Profil * |
#11 · Zasláno: 30. 6. 2011, 21:09:44
[#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 |
#12 · Zasláno: 30. 6. 2011, 21:28:32 · Upravil/a: Davex
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 |
#13 · Zasláno: 30. 6. 2011, 21:32:22
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 * |
#14 · Zasláno: 30. 6. 2011, 21:39:19
[#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 |
#15 · Zasláno: 30. 6. 2011, 21:52:45
baldur:
„Živou ukázku bohužel nemohu dodat“ A to už prečo? |
||
Chamurappi Profil |
#16 · Zasláno: 30. 6. 2011, 21:56:15
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 |
#17 · Zasláno: 30. 6. 2011, 22:09:49
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 * |
#18 · Zasláno: 30. 6. 2011, 22:54:10
[#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 |
#19 · Zasláno: 30. 6. 2011, 23:35:35 · Upravil/a: _es
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 |
#20 · Zasláno: 1. 7. 2011, 00:32:17 · Upravil/a: Witiko
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.
|
||
Časová prodleva: 11 dní
|
|||
Maar Profil * |
#21 · Zasláno: 11. 7. 2011, 19:32:01
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 |
#22 · Zasláno: 11. 7. 2011, 19:45:27
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 * |
#23 · Zasláno: 11. 7. 2011, 20:14:59
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 |
#24 · Zasláno: 11. 7. 2011, 20:52:27
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 * |
#25 · Zasláno: 11. 7. 2011, 20:52:49
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 |
#26 · Zasláno: 11. 7. 2011, 20:59:28
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.
|
||
Časová prodleva: 13 let
|
0