12 of 17 menu

Chyba zákazu přechodu na odkaz v JavaScriptu

Předpokládejme, že máme odkaz:

<a href="">odkaz</a>

Získáme náš odkaz do proměnné:

let link = document.querySelector('a');

Připojme k našemu odkazu obslužnou rutinu kliku. Zároveň zrušme přechod na odkaz, abychom se vyhnuli opětovnému načtení stránky:

link.addEventListener('click', function(event) { console.log(this.textContent); event.preventDefault(); });

Zdá se, že jsme se plně ochránili před neočekávaným chováním. Ve skutečnosti to tak není. Jde o to, že při výskytu syntaktické chyby JavaScript kód jednoduše nebude proveden, blokování odkazu nefunguje a dojde k přechodu na něj.

V tomto případě neuvidíme ani výsledek provedení kódu, ani chybu v konzoli, protože stránka se znovu načte. Udělejme záměrně chybu v kódu a přesvědčme se v praxi:

link.addEventListener('click', function(event) { thiss.textContent = 'text'; // syntaktická chyba event.preventDefault(); });

Tento problém má charakteristický rys: pokud se podíváme do konzole v okamžiku kliknutí na odkaz, uvidíme na okamžik červenou chybu v konzoli, která téměř okamžitě zmizí.

Samozřejmě, že text chyby nestihneme přečíst, což výrazně ztěžuje její hledání. Existuje však chytrý trik. Je třeba do href odkazu vložit mřížku. V tomto případě k přechodu na odkaz nedojde a uvidíme vyvolanou chybu v konzoli:

<a href="#">odkaz</a>
Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout