JavaScriptにおけるリンク遷移エラー
予期しないリンク遷移に関連するエラーについて 詳しく見ていきましょう。 例として、以下のようなリンクが 与えられているとします:
<a href="">link</a>
リンクを変数に取得しましょう:
let link = document.querySelector('a');
このリンクにクリックイベントハンドラを バインドします:
link.addEventListener('click', function() {
console.log(this.textContent);
});
ここで予期しない事態が起こります。コードは
正しく書かれていますが、コンソールに出力が
現れません。
その理由は、クリック時にリンクへの遷移が
発生するためです。属性 href に何も
指定されていないため、リンクは単に
現在のページを指しています。
つまり、リンクをクリックすると ページがリロードされます。データは コンソールに出力されますが、その後ページが 再読み込みされ、コンソールが空になります。
注意深く観察すると、クリックの瞬間に データが一瞬コンソールに表示され、 その後消えるのが分かります。これが このエラーの特徴的な兆候です。
この問題を解決する方法を 見ていきましょう。
解決策 1
リンクの href にハッシュ記号(#)を
設定します。これにより、リンクは現在の
ページ内の特定の場所を指し示し、
リンクをクリックしてもリロードは
発生しません。
実装してみましょう:
<a href="#">link</a>
解決策 2
より高度な方法は、 preventDefault メソッドを使用して デフォルトの動作をキャンセルすることです:
link.addEventListener('click', function(event) {
console.log(this.textContent);
event.preventDefault();
});