Href= "javascript:" vs. href= "javascript: void (0)"
Наше веб-приложение полностью отображается в браузере.
Сервер только разговаривает с браузером через сообщения JSON.
В результате нам нужна только одна страница для приложения, и в основном все теги <a>
не имеют реального href
, указывающего на другие страницы.
В моих поисках удаления ненужных вещей мне было интересно, могу ли я избавиться от zillions void(0)
, которые у нас есть в нашем коде, поскольку они кажутся бесполезными:
<a onclick="fn()">Does not appear as a link, because there no href</a>
<a href="javascript:void(0)" onclick="fn()">fn is called</a>
<a href="javascript:" onclick="fn()">fn is called too!</a>
Кто-нибудь знает, может ли возникнуть проблема с использованием href="javascript:"
?
Он работает даже на IE7...
Пожалуйста, не тратьте свое драгоценное время, чтобы сказать мне, что встроенный javascript плох, поскольку он генерируется движком шаблона:)
Ответы
Ответ 1
Это не вызывает проблем, но это трюк, чтобы сделать то же самое, что PreventDefault
когда вы находитесь на странице и якорь:
<a href="#" onclick="fn()">click here</a>
вы перейдете к вершине, и URL будет содержать якорь #
, чтобы избежать этого просто return false;
или использовать javascript:void(0);
относительно ваших примеров
<a onclick="fn()">Does not appear as a link, because there no href</a>
просто сделайте a {text-decoration:underline;}
, и у вас будет ссылка "a-like"
<a href="javascript:void(0)" onclick="fn()">fn is called</a>
<a href="javascript:" onclick="fn()">fn is called too!</a>
это нормально, но в конце function
в конце, просто return false;
, чтобы предотвратить поведение по умолчанию, вам больше не нужно ничего делать.
Ответ 2
При использовании javascript:
в навигации возвращаемое значение выполненного script, если оно есть, становится содержимым нового документа, который отображается в браузере. Оператор void
в JavaScript вызывает возвращаемое значение выражения, следующего за ним, для возврата undefined, что предотвращает это действие. Вы можете попробовать это самостоятельно, скопировать следующее в адресную строку и нажать return:
javascript:"hello"
Результатом является новая страница с только словом "привет". Теперь измените его на:
javascript:void "hello"
... ничего не происходит.
Когда вы пишете javascript:
самостоятельно, выполняется script, поэтому результат выполнения script также undefined, поэтому браузер ничего не делает. Это делает следующие более или менее эквивалентными:
javascript:undefined;
javascript:void 0;
javascript:
За исключением того, что undefined можно переопределить, объявив переменную с тем же именем. Использование void 0
, как правило, бессмысленно, и оно в основном уменьшилось с void functionThatReturnsSomething()
.
Как отмечали другие, лучше использовать return false;
в обработчике кликов, чем использовать протокол javascript:
.
Ответ 3
Использование 'javascript: void 0' вызовет проблему в IE
когда вы нажмете ссылку, это вызовет событие onbeforeunload окна
<!doctype html>
<html>
<head>
</head>
<body>
<a href="javascript:void(0);" >Click me!</a>
<script>
window.onbeforeunload = function() {
alert( 'oops!' );
};
</script>
</body>
</html>
Ответ 4
Этот метод выглядит нормально во всех браузерах, если вы установите onclick с событием jQuery:
<a href="javascript:;">Click me!</a>
Как было сказано ранее, href= "#" с изменением хеша URL-адреса и может инициировать повторную загрузку данных, если вы используете плагин JS (или ba-bbq).
Ответ 5
вы можете сделать их всех #
.
Затем вам нужно добавить return false;
в конец любой функции, которая вызывается onclick якоря, чтобы страница не переместилась вверх.
Ответ 6
Обычно я не использую href и не изменяю аспект с помощью css, что делает их ссылкой. Таким образом, вам не нужно беспокоиться о эффекте ссылки вообще, кроме обработчика событий вашего приложения
a {
text-recoration: underline;
cursor: pointer;
}
Ответ 7
Почему все события click в качестве a href
ссылок?
Если вместо этого вы используете теги span
с :hover
CSS и соответствующими событиями onclick, это полностью обойдется проблеме.
Ответ 8
JavaScript: недействительным (0); → this выполняет функцию void и возвращает undefined. Это может иметь проблемы с IE. Javascript :; → ничего не делает. безопаснее создавать мертвые ссылки. '#' → это означает указание на тот же DOM, он перезагрузит страницу нажатием.