12 of 17 menu

Linkin siirtymisen estovirhe JavaScriptissä

Oletetaan, että meillä on linkki:

<a href="">link</a>

Haetaan linkki muuttujaan:

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

Liitetään linkkiimme klikkauskäsittelijä. Estetään samalla siirtyminen linkin kautta välttääksemme sivun uudelleenlataamisen:

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

Voi vaikuttaa siltä, että olemme täysin suojautuneet odottamattomalta käyttäytymiseltä. Itse asiassa nin ei ole. Asia on siinä, että syntaktisen virheen tapahtuessa JavaScript-koodia ei suoriteta, linkin esto ei toimi, ja siirtyminen tapahtuu.

Tässä tapauksessa emme näe koodin suorituksen tulosta eikä virhettä konsolissa, koska sivu latautuu uudelleen. Tehdään tarkoituksella virhe koodiin ja varmistutaan käytännössä:

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

Tällaisella ongelmalla on tunnusomainen piirre: jos katsomme konsolia linkkiä klikatessa, näemme hetkellisesti punaisen virheen konsolissa, joka katoaa melkein heti.

Tietenkään emme ehdi lukea virheviestiä, mikä vaikeuttaa sen etsimistä huomattavasti. On kuitenkin olemassa ovela temppu. Pitää laittaa href -linkkiin risuaita. Tässä tapauksessa linkin siirtymistä ei tapahdu ja näemme konsoliin heitetyn virheen:

<a href="#">link</a>
Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää