javascript void 0 как исправить
javascript:void(0) используется чаще всего для создания ссылок, которые не переходят на другую страницу, но запускают JavaScript. Однако, современные стандарты рекомендуют избегать использование javascript:void(0) , так как оно может вызвать проблемы с безопасностью и доступностью.
Лучшим подходом для создания ссылок, которые запускают JavaScript, является использование обработчиков событий. Например, для создания ссылки, которая запускает функцию myFunction() , можно использовать следующий код:
href="#" onclick="myFunction()">Нажми меня
Здесь href=»#» указывает браузеру, что ссылка должна оставаться на текущей странице, а onclick указывает браузеру, что при нажатии на ссылку должна запуститься функция myFunction() .
Также можно использовать метод addEventListener() для добавления обработчика событий на ссылку:
href="#" id="myLink">Нажми меня
const link = document.querySelector('#myLink'); link.addEventListener('click', myFunction);
Здесь мы выбираем ссылку с помощью document.querySelector() , добавляем ей уникальный идентификатор id , и затем добавляем обработчик событий на эту ссылку с помощью addEventListener() .
В защиту javascript:void(0);
Намедни я решил посмотреть новости через Google. Нажимаю правой кнопкой на ссылку «другие новости» и в контекстном меню нет пунтка открыть в новом окне. Я решил глянуть исходный код и вижу javascript:void(0);
Для меня это стало новостью, ведь все что читал до этого — было однозначно против такого решения.
Я имею ввиду ситуацию когда ссылка запускает какой-то js код и по прямому назначению не используется, то какую разметку лучше использовать?
.
или
.
Void лучше href=»#» поскольку поведение href=»#» при открытии в новом окне для пользователей неожиданно: пользователь кликает на 15 ссылок правой кнопкой мыши и открывает каждую в новой вкладке. В итоге у него 16 вкладок с одним и тем-же документом.
Чтобы если вдруг стандарт «javascript:» отменят не было коллизий используйте вместе с ним onclick=«return false;». Подсмотрено у Гугл ньюс:
Нужно ли использовать ‘#’ или ‘javascript:void(0)’ в href-атрибуте пустых ссылок
Стоит ли применять JavaScript void 0 ? Если использовать # , и тем самым препятствуя привычной работе ссылок, ( например, для прокрутки к верху страницы ), то приходится указывать и значение return false для функции в событии onclick :
Hey Hey
Если вместо этого использовать javascript:void , то использовать return false не нужно, так как void(0) – самый миниатюрный скрипт, который расценивается как undefined . То есть:
Тот же эффект, что и при использовании href=»#» , только код с JavaScript void меньше и чище.
JavaScript: void(0)
Когда мы используем JavaScript в навигации, значение return в исполняемом скрипте становится содержимым нового документа, который отображается в браузере. Оператор void превращает значение return value в следующем за ним выражении в return undefined , что и предотвращает исполнение данного события.
Ссылка перенаправляет браузер на текстовую версию результатов, которые расценены как JavaScript . Однако если результатом будет undefined , то браузер останется на той же странице. JavaScript void 0 — что значит? Это миниатюрный скрипт, который определяется как undefined .
Однако javascript:void(0) ; нарушает Content Security Policy ( CSP, политика защиты контента ) у протокола HTTPS эта защита включена. Это помогает выявлять и нивелировать определенные типы атак, включая Cross-Site Scripting ( XSS ), инъекции вредоносных данных.
Следовательно, если вы суеверный разработчик, то пользуйтесь href=»#» вместо javascript:void и не беспокойтесь о нарушении политики защиты.
Href=»#»
Хэш безопаснее в тех случаях, когда у пользователей отключена поддержка JavaScript .
Хотя эту проблему можно легко обойти за счет jQuery :
$('a[href="#"]').click(function(e) < e.preventDefault ? e.preventDefault() : e.returnValue = false; >);
Можно даже вернуть false в атрибут элемента onclick , и получить тот же эффект:
Несколько рекомендаций напоследок
В href javascript void 0 используется, если нужен четкий и быстрый результат.
href=»#» и предотвращение исполнения события используется тогда, когда не хочется нарушать стандарты JavaScript.
- Если ссылка никуда не ведёт, не используйте элемент . Воспользуйтесь элементом , а также не забудьте стилизовать ссылки при помощи CSS ;
- Представление не следует смешивать с содержанием. Это значит никаких javascript:action и атрибутов onclick . Вместо этого предотвратите исполнение события при помощи чистого кода JavaScript .
Что такое javascript:void(0);?
Ребят, всем привет.
Есть сайт. Там есть ссылка с href = «javascript:void(0);» . Что это? И как узнать, на что ссылается, и где этот скрипт? Есть доступ ко всем исходникам.
Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
задан 8 янв 2015 в 18:24
duddeniska duddeniska
3,948 17 17 золотых знаков 66 66 серебряных знаков 112 112 бронзовых знаков
Это обычная заглушка. В данном случае букмарклет. Предотвращение стандартного поведения ссылки.
8 янв 2015 в 18:40
7 ответов 7
Сортировка: Сброс на вариант по умолчанию
void(0) — это выражение, получающееся приведением типа константы 0 к void . То есть простое ничего не значащее выражение.
Ссылка в таком виде просто ничего не делает. (И это популярная идиома, кстати.) Не исключено, скрипт на странице модифицирует href позже, чтобы ссылка делала что-то более вразумительное; но пока/если этот скрипт не пробежал, ссылка останется такой, как есть.
Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
ответ дан 8 янв 2015 в 18:39
206k 28 28 золотых знаков 291 291 серебряный знак 526 526 бронзовых знаков
Например, есть такая ссылка «> . Она работает только в платном пакете. Хочу узнать, какой скрипт отрабатывается!
8 янв 2015 в 18:40
@duddeniska: Это вам надо остальные исходники смотреть, в приведённой части ничего информативного нет.
8 янв 2015 в 20:08
undefined слишком долго писать?
24 июн 2017 в 6:08
@Alex78191: Это не ко мне, в вопросе упоминается именно void(0) .
24 июн 2017 в 10:23
@Alex78191 void 0 занимает меньше букв чем undefined и это может влиять на конечный размер скрипта. При использовании тулов типа typescript/babel это более очевидно.
12 окт 2017 в 12:17
Когда браузер переходит по ссылке javascript: , то заменяет содержание страницы на возвращаемое значение, кроме случаев, когда вернулось undefined . Оператор void всегда возвращает это самое значение undefined .
Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
ответ дан 9 янв 2015 в 12:19
30.7k 4 4 золотых знака 47 47 серебряных знаков 86 86 бронзовых знаков
В старых браузерах была возможность создать переменную с именем undefined. Соответственно, чтобы получить значение undefined используется такая конструкция. Конструкции void можно передать любое число/тип переменной — void 123,void [] так же вернет undefined.
Отслеживать
ответ дан 9 янв 2015 в 8:27
2,046 2 2 золотых знака 28 28 серебряных знаков 62 62 бронзовых знака
Конструкцию типа href = «javascript:void(0);» используют обычно тогда, когда вместе обычного перехода по ссылке должен сработать js скрипт.
Примеры таких случаев — открытие модального окна, отправка/получение данных с помощью ajax или необходимость проверить какие-то данные с помощью js перед тем как совершить переход по этой ссылке.

Чтобы найти скрипт, который срабатывает при клике на эту ссылку стоит посмотреть в режиме инспектора. Пример как это можно сделать, на скриншоте: