Javascript void 0 как исправить
Перейти к содержимому

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

  • автор:

Нужно ли использовать ‘#’ или ‘javascript:void(0)’ в href-атрибуте пустых ссылок

Стоит ли применять JavaScript void 0 ? Если использовать # , и тем самым препятствуя привычной работе ссылок, ( например, для прокрутки к верху страницы ), то приходится указывать и значение return false для функции в событии onclick :

Hey Hey  

Если вместо этого использовать javascript:void , то использовать return false не нужно, так как void(0) – самый миниатюрный скрипт, который расценивается как undefined . То есть:

Тот же эффект, что и при использовании href=»#» , только код с JavaScript void меньше и чище.

Обновлено: 2022-01-15 15:28:03 Валентин Сейидов автор материала

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 .

void operator

Оператор void вычисляет переданное выражение и возвращает undefined .

Синтаксис

void expression

Описание

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

Оператор void часто используется для получения примитивного значения undefined , используя «void(0)» (что эквивалентно «void 0» ). В подобных случаях можно просто использовать глобальную переменную undefined (предполагая, что её значение по умолчанию не было изменено).

Самовызывающаяся функция (IIFE)

С оператором void можно использовать самовызывающиеся функции.

void (function iife()  var bar = function () >; var baz = function () >; var foo = function ()  bar(); baz(); >; var biz = function () >; foo(); biz(); >)(); 

JavaScript URIs

Когда браузер переходит по javascript: URI , он вычисляет код в URI и заменяет содержание страницы возвращённым значением, если оно не равно undefined . Можно воспользоваться оператором void для возврата undefined . Например:

a href="javascript:void(0);">Click here to do nothinga> a href="javascript:void(document.body.style.backgroundColor='green');"> Click here for green background a> 

Однако заметим, что не рекомендуется использовать псевдо-протокол javascript: . Лучше прибегнуть к другим альтернативам, таким, как обработчики событий.

Спецификации

Specification
ECMAScript Language Specification
# sec-void-operator

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 7 авг. 2023 г. by MDN contributors.

Your blueprint for a better internet.

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;». Подсмотрено у Гугл ньюс:

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

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