xom`s pinion - Tom Hnatovsky Blog
IE a zdánlivá chyba onclick
Na několika diskusních fórech jsem při tvorbě xbo narazil na řešení problému s událostí onclick
na elementu a
v Internet Exploreru a mnoho diskutujících se shodlo na tom, že prostě IE sucks, že je blbé, že to neumí. Problém spočívá v samotných autorech javascriptového kódu. Nutno ale na jejich drobnou obranu přiznat, že se IE chová drobně odlišně než ostatní prohlížeče. Pokud se psaním javascriptů zabýváte jenom trochu vážněji, tak pro vás budou následující řádky naprosto jasné a budete se asi podivovat nad primitivností..
A teď k tomu, pro někoho nepřekonatelnému, problému. Při kliknutí na odkaz s definovaným skriptem na události onclick
se provede přesměrování na odkazovanou stránku a javascript se nevykoná. Zde je první chyba, javascript se vykoná, ale ve většině problematických případech nevrací volaná funkce boolean hodnotu false, která zamezí dalšímu zpracování události, zároveň i přesměrování. Hierarchie je následná – obslouží se skriptové události a až pak se zpracovávají ostatní atributy (například přesměrování, schválení formuláře). Mnoho skriptařů (to je slovo, co? Ale trefné. ;o)) použije konstrukci onclick=“nejakaFunkce(); return false;“
Ve Firefoxu a Opeře se to úspěšně zpracuje, ale IE bere v potaz pouze první část (po první středník) a poté pokračuje ostatními atributy tagu. Proto je žádoucí, aby return false
vracela již funkce nejakeFunkce()
.
Dalším problémem je různá implementace funkcí v jednotlivých překladačích prohlížečů. Zde naráží jiná skupina skriptařů, kteří úspěšně vykonávají nějaký skript v jiných prohlížečích, ale v IE jim to nefunguje a přesměrovává jinam. Je to kvůli tomu, že pokud najde parser IE v javascriptu chybu (nebo syntaxi, kterou neumí), přestane zpracovávat kód a pokračuje v dalších operacích, které následují po zpracování skriptových událostí. Velice chabým řešením zamezení přesměrování považuji nahrazení nějaké smysluplné adresy za “#“, což vrátí uživatele na počátek aktivní stránky. Nezapomínejme, že by měla být základní funkčnost webu zachována i bez javascriptu, sice třeba méně komfortně. Ano, javascript přidávám do stránek kvůli zvýšení komfortu, zefektivnění práce.
Na závěr bych chtěl poradit, abyste si své skripty kontrolovali i svým selským rozumem, rozumnou analýzou, zvolání IE sucks umí říci každý, ale málokdo má v ten moment pravdu.
Zkuste se také občas podívat do dokumentace v jednotlivých prohlížečích:
Komentovat
Článek zatím nebyl komentován. Podělte se svým názorem.