Autor Zpráva
Celda
Profil *
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 *
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 *
Díky, mohlo mě to napadnout. Celda
Celda
Profil *
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
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 *
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
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 *
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
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
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?

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:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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