Ошибка перехода по ссылке в JavaScript

Давайте разберем ошибку, связанную с неожиданным переходом по ссылке. Пусть для примера дана следующая ссылка:

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

Получим нашу ссылку в переменную:

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

Привяжем к нашей ссылке обработчик клика:

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

И вот здесь нас ждет сюрприз. Код написан верно, однако, вывод в консоли не появляется. Дело в том, что при клике происходит переход по ссылке. Так как в атрибуте href ничего не указано, то ссылка просто ведет на текущую страницу.

Это значит, что клик на ссылку приводит к перезагрузке страницы. То есть наши данные выводятся в консоль, затем страница перезагружается, и консоль становится пустой.

Если внимательно присмотреться, то можно увидеть, как в момент клика данные появляются в консоли на мгновение, а затем пропадают. Это и есть характерный признак данной ошибки.

Давайте посмотрим, как можно решить данную проблему.

Решение первое

В href ссылки нужно поставить решетку. Это приведет к тому, что ссылка будет указывать на определенное место текущей страницы и при клике на ссылку перезагрузки не будет. Сделаем это:

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

Решение второе

Более продвинутым способом является отмена действия по умолчанию с помощью метода preventDefault:

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