Що таке javascript: void(0) ?
І як правильно виправити цю помилку на сайті
Якщо ви працюєте з веброзробкою, є висока імовірність того, що ви стикалися з виразом javascript:void(0);
. Часто його використовують під час роботи з посиланнями та подіями на сторінці. Але що ж він означає і для чого його застосовують? Нумо розбиратися.
Що таке javascript:void(0);
?
javascript:void(0);
— це вираз на JavaScript, який використовують як значення атрибута href посилання (виділяють у розмітці <a></a>
).
Ось як це працює:
1. Ключове слово javascript:
означає для браузера, що тут зазначений код на JavaScript.
2. Оператор void
приймає аргумент і повертає undefined
, незалежно від того, що передається як аргумент. У нашому випадку аргументом є 0, але за передачі будь-якого іншого значення результат буде тим самим.
3. Таким чином, результатом виконання javascript:void(0)
є відсутність значення, яке повертається. Для браузера це сприймається як заборона виконувати дії, що передбачені за замовчуванням.
Для чого ж використовують javascript:void(0);
?
Основне призначення цієї конструкції — зупинити стандартні операції в браузері. Як ми вже згадували раніше, найчастіше її можна побачити в посиланнях (<a></a>
). Уявімо, що розробник не хоче, щоб відбувалося перенаправлення на якусь іншу сторінку або ж стандартне оновлення сторінки. Тоді розробник зазначить це таким чином:
<a href="javascript:void(0);" onclick="myFunction()">Тисни тут</a>
У прикладі вище за натискання на посилання браузер не оновить сторінку і не виконуватиме будь-які інші стандартні та непотрібні дії. Натомість викликається функція myFunction()
, яка і призначена виконати запланований функціонал. Оператор void(0)
гарантує, що ніякі інші дії не здійсняться після того, як користувач клікне на посилання.
Чи можна замінити javascript:void(0);?
Відповідь — так, навіть потрібно. Тож розглянемо, як ми можемо замінити цей вираз, а потім з’ясуємо, чому це варто зробити.
Маємо 2 основних варіанти заміни цього виразу:
1. return false
Цей варіант полягає у використанні саме подій і функцій. Можна обробляти подію кліку на посилання без маніпуляцій атрибутом href. Для прикладу:
<a href="#" onclick="myFunction(); return false;">Тисни тут</a>
У цьому випадку атрибут href="#"
мав би викликати оновлення сторінки, але оператор return false;
у функції onclick
зупиняє стандартну поведінку.
Проте важливо пам’ятати, що застосування # все ж таки може викликати оновлення сторінки або скролінг до верхньої частини сторінки, що може бути також небажаним. Перевіряйте, як ваші інструменти працюватимуть за використання таких конструкцій, однак такий варіант є і його варто розглядати.
2. preventDefault()
Сучасний та оптимальний спосіб запобігання стандартній поведінці подій — це використання методу event.preventDefault() у JavaScript.
<a href="#" id="myLink">Тисни тут</a>
<script>
document.getElementById("myLink").addEventListener("click", function(event){
event.preventDefault();
myFunction();
});
</script>
Цей підхід дає змогу скасувати дію за замовчуванням, яку виконує браузер.
Саме такий спосіб вказано в специфікації DOM 2 Event.
Чому не варто використовувати javascript:void(0);
?
1. Погана читабельність: застосування такої конструкції може знижувати сприйняття коду. Це має не такий інтуїтивний вигляд, як, наприклад, використання подій JavaScript через addEventListener.
2. Застарілі підходи: хоча це доволі поширений підхід, його часто вважають застарілим у сучасній веброзробці.
3. Проблеми із SEO: в контексті пошукових систем та інструментів javascript:void(0)
може впливати на оптимізацію, оскільки такі посилання не мають реального призначення і їх можуть розцінити як погано структурований код.
Отже, конструкцію javascript:void(0);
використовують для скасування стандартних операцій браузера. Однак у сучасній веброзробці існують елегантніші й сучасніші підходи для розв’язання цієї проблеми, як-от методи обробки подій через JavaScript (наприклад, event.preventDefault()
).
На практиці ж javascript:void(0)
досі застосовують у багатьох давніх або простих проєктах, але нові стандарти програмування рекомендують переходити на зрозуміліші та сучасніші методи роботи з подіями.