12 of 17 menu

Nuorodos perėjimo blokavimo klaida JavaScript

Tarkime, kad turime nuorodą:

<a href="">nuoroda</a>

Gaukime mūsų nuorodą į kintamąjį:

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

Pririškime prie mūsų nuorodos paspaudimo apdorojimo funkciją. Tuo pačiu atšauksime perėjimą pagal nuorodą, kad išvengtume puslapio iškrovimo:

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

Atrodo, kad visiškai apsisaugojome nuo netikėto elgesio. Iš tikrųjų tai nėra taip. Esmė ta, kad atsiradus sintakseinei klaidai, JavaScript kodas tiesiog nebus vykdomas, nuorodos blokavimas neveiks ir bus atliktas perėjimas pagal ją.

Šiuo atveju nematysime nei vykdymo rezultato, nei klaidos konsolėje, nes puslapis bus perkrautas. Specialiai sukurkime klaidą kode ir įsitikinkime praktiškai:

link.addEventListener('click', function(event) { thiss.textContent = 'tekstas'; // sintaksinė klaida event.preventDefault(); });

Ši problema turi būdingą požymį: jei žiūrėtume į konsolę nuorodos paspaudimo momentu, akimirką pamatysime raudoną klaidą konsolėje, kuri beveik iškart dings.

Žinoma, klaidos teksto perskaityti nespėsime, kas labai apsunkina jos paiešką. Tačiau yra gudrus būdas. Reikia į href nuorodos įdėti grotelę. Tokiu atveju perėjimo pagal nuorodą nebus ir pamatysime į konsolę išmestą klaidą:

<a href="#">nuoroda</a>
Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti