11 of 17 menu

Erreur de navigation par lien en JavaScript

Analysons une erreur liée à une navigation inattendue par lien. Prenons par exemple le lien suivant :

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

Récupérons notre lien dans une variable :

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

Attachons un gestionnaire de clic à notre lien :

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

Et c'est ici que nous attend une surprise. Le code est écrit correctement, cependant, la sortie dans la console n'apparaît pas. Le fait est qu'un clic entraîne une navigation via le lien. Comme rien n'est spécifié dans l'attribut href, le lien mène simplement à la page actuelle.

Cela signifie qu'un clic sur le lien provoque un rechargement de la page. C'est-à-dire que nos données sont affichées dans la console, puis la page se recharge, et la console devient vide.

Si on observe attentivement, on peut voir qu'au moment du clic les données apparaissent dans la console pendant un instant, puis disparaissent. C'est le signe caractéristique de cette erreur.

Voyons comment résoudre ce problème.

Première solution

Dans le href du lien, il faut mettre un dièse. Cela fera que le lien pointera vers un endroit spécifique de la page actuelle et un clic sur le lien ne provoquera pas de rechargement. Faisons cela :

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

Deuxième solution

Une méthode plus avancée consiste à annuler l'action par défaut à l'aide de la méthode preventDefault :

link.addEventListener('click', function(event) { console.log(this.textContent); event.preventDefault(); });
Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser