Перейти к содержимому

Javascript void 0 как исправить

  • автор:

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 перед тем как совершить переход по этой ссылке.

Пример как увидеть обрабатывающий js скрипт

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Luxury Car Rental in Miami | Reserve a Premium Vehicle with RealCar