12 of 17 menu

Fel vid förbud av länkföljning i JavaScript

Låt oss säga att vi har en länk:

<a href="">länk</a>

Låt oss hämta vår länk till en variabel:

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

Låt oss koppla en klick-hanterare till vår länk. Vi kommer att förhindra navigering på länken för att undvika omladdning av sidan:

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

Det verkar som om vi har skyddat oss helt från oväntat beteende. Men i verkligheten är det inte så. Saken är den att om ett syntaktiskt fel uppstår i JavaScript kommer koden helt enkelt inte att köras, blockeringen av länken kommer inte att fungera, och navigering på den kommer att ske.

I det här fallet kommer vi varken att se resultatet av kodkörningen eller felet i konsolen, eftersom sidan laddas om. Låt oss medvetet göra ett fel i koden och se till i praktiken:

link.addEventListener('click', function(event) { thiss.textContent = 'text'; // syntaktiskt fel event.preventDefault(); });

Detta problem har ett karakteristiskt kännetecken: om man tittar i konsolen i ögonblicket av klicket på länken, kommer vi under ett ögonblick att se ett rött fel i konsolen, som nästan omedelbart försvinner.

Naturligtvis hinner vi inte läsa felmeddelandet, vilket avsevärt försvårar dess sökning. Det finns dock ett knepigt trick. Man måste sätta ett nummer-tecken i länkens href. I det här fallet kommer navigering på länken inte att ske och vi kommer att se felet som kastas i konsolen:

<a href="#">länk</a>
Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa