Autor | Zpráva | ||
---|---|---|---|
Celda Profil * |
#1 · Zasláno: 20. 8. 2007, 17:30:36
Dobrý den,
IE7 zdá se chybně zpracovává return false v onclick attributu u elementu A. toto: <a href="http://idnes.cz" onClick="return false">idnes</a> implementuje správně a odkaz nelze prokliknout, ale toto: <script language="javascript"> function klpof() {return false;} </script> <a href="http://idnes.cz" onClick="klpof()">idnes</a> implementuje špatně a odkaz nezávisle na fci klpof() proklikne. Stejně tak pokud fci k odkazu přiřadíme ve sriptu: <script language="javascript"> e.onclick = actionFce; // e je element odkazu function actionFce() { return false; } </script> Umíte někto zařídit, aby IE7 po vrácení false fcí v onclick odkaz neprokliknul? Díky |
||
pmg Profil * |
#2 · Zasláno: 20. 8. 2007, 17:49:07
Zdravím, nedělá to jen IE; aby se návratová hodnota funkce předala odkazu, musí se psát onClick="return klpof();".
|
||
Celda Profil * |
#3 · Zasláno: 20. 8. 2007, 17:49:54
Díky, mohlo mě to napadnout. Celda
|
||
Celda Profil * |
#4 · Zasláno: 20. 8. 2007, 17:52:36
Nicméně, to řesí pouze situaci dva.
Ovšem já přidávám onclick funkci až následně v javascriptu a přímo v html ji přidat nemůžu. <script language="javascript"> e.onclick = actionFce; // e je element odkazu function actionFce() { return false; } </script> a tam mi toto řešení nepomůže. |
||
peta Profil |
#5 · Zasláno: 20. 8. 2007, 20:32:49 · Upravil/a: peta
Celda
Co ti napise JS konzola? Bylo by fajn si to precist nez polozim takovyto dotaz. e.onclick = actionFce; // e je element odkazu actionFce NOT DEFINED a jestlize neco neni definovano, pak se to nemuze spustit tj, dostavas se do situace: e.onclick = null; null a false jsou 2 ruzne konstanty |
||
Celda Profil * |
#6 · Zasláno: 20. 8. 2007, 22:13:15
to peta:
asi jsem to mel napsat, ale pochopitelne ze tu fci definovanou mam, nedaval jsem sem cely dotaz tedy doplnte function actionFce() { return false; } a problem pretrva. |
||
Chamurappi Profil |
#7 · Zasláno: 20. 8. 2007, 22:35:31
Reaguji na petu:
„null a false jsou 2 ruzne konstanty“ To sice jsou, ale i kdyby přiřadil do e.onclick hodnotu false, tak to nepůjde, protože rozhodující je až návratová hodnota přiřazené funkce. Reaguji na Celdu: „pochopitelne ze tu fci definovanou mam“ Máš ji definovanou před přiřazením? |
||
Celda Profil * |
#8 · Zasláno: 21. 8. 2007, 00:28:36
Chamurappi
diky za reakce. Zahrabavam se do toho a zda se ze je to slozitejsi. Ta fce tam prirazena je a funguje. Nicmene: udelal jsem si jednoduchou ukazku kodu, ktere nema v ie fungovat: <script language="javascript"> window.onload = init; function init() { alert('init'); var e = document.body; e.firstChild.nextSibling.onclick = klpof; } function klpof() { alert('onclick'); return false; } </script> <a href="http://idnes.cz" id="testid">idnes</a> a ejhle funguje spravne. V mem kodu (podstatne slozitejsim) ale ne. Pokusim se najit odlist a pak ji sem vlozim. |
||
peta Profil |
#9 · Zasláno: 21. 8. 2007, 10:19:31
Celda
Opet jsme tam, kde jsme byli. Co ti vypisuje JS konzola? window.onload = init; IS NOT DEFINED. Proc? Protoze nejdrive prirazujes a pak mas az teprve radek function init() {} Cili, jestli ti to funguje, povazuj to za zazrak. Spise za chybu. Jo, jestli to mas <BODY> <script>... <a href="http://idnes.cz" id="testid">idnes</a> </BODY> tak dojde k velmi zajimavym udalostem Tag body uz existuje a nemel udalost onload. Z nejakeho duvodu ti IE zrejme dovoli priradit body onload uz do jiz uzavreneho tagu. Coz je naprosta chyba IE. Ale lze ji vysvetlit. IE totiz zpracovava JS jako celek a tagy take jako celky. Proto treba vykresleni rozsahle tabulky trva tak dlouho a zabira tolik pameti. K cemu presne dojde? - vytvor tag body - v tagu body je script, nacti cely script do pameti (v tuto chvili zrejme naprosto ignoruje prirazeni akce onload, prikazy si nacte, vytvori si funkce) - mam-li script v pameti, zacni jej vykonavat a jako prvni je spusteni onload funkce a ta funkce je v pameti funkci, takze to funguje. Ale je to vylozene jen nahoda. Navic, prave ted si muzes zpusobit zacykleni stranky, ale IE to ma zrejme osetrene. |
||
Chamurappi Profil |
#10 · Zasláno: 22. 8. 2007, 02:25:47
Reaguji na Celdu:
„Zahrabavam se do toho a zda se ze je to slozitejsi.“ Je. Otázka, kterou jsem ti minule položil, vycházela z předpokladu, že na pořadí záleží. Už jsem si ověřil, že v tomto případě nezáleží. Kdybys místo „function init() {...}“ použil „var init = function() {...};“, pak teprve by na pořadí záleželo. Řekl bych, že chyba není ve zde uvedeném kousku kódu. Někde uvnitř onclick ti patrně cosi vyvolá neošetřenou výjimku, takže se už return false nevykoná. Reaguji na petu: „window.onload = init; IS NOT DEFINED.“ Psal, že tohle mu funguje. A má pravdu, init je defined. „Cili, jestli ti to funguje, povazuj to za zazrak. Spise za chybu.“ Funguje to (zdá se) napříč prohlížeči. To nebude ani zázrak, ani chyba. „Jo, jestli to mas [...] tak dojde k velmi zajimavym udalostem“ Co kdyby sis to sám vyzkoušel? „Z nejakeho duvodu ti IE zrejme dovoli priradit body onload uz do jiz uzavreneho tagu.“ 1) On přiřazuje do window.onload, na <body> nesahá. 2) Je to nesmysl. 3) Element <script> nejde dát za <body> a v <head> by pokus o okamžité přiřazení do document.body.onload skončil chybou. Kde tedy podle tebe jde document.body.onload nastavit? „IE totiz zpracovava JS jako celek a tagy take jako celky.“ JScriptový interpretr načítá každý <script> zvlášť a HTML značky projíždí proudový HTML parser tvořící okamžitě DOM. K dosud neuzavřeným elementům přistupovat jde. „Navic, prave ted si muzes zpusobit zacykleni stranky“ Jak? |
||
Časová prodleva: 17 let
|
0