с href="javascript В:" и с href="код JavaScript:недействительным(0)"
наше веб-приложение отображается полностью в браузере.
сервер говорит браузеру посредством обмена сообщениями в формате JSON.
в результате, нам нужна только одна страница для приложения и в основном все <a> теги не имеют реальной href указывая на другие страницы.
в моих поисках удаления ненужных вещей мне было интересно, если я могу избавиться от зиллионов void(0) мы имеем в нашем коде, как они кажутся бесполезными:
<a onclick="fn()">Does not appear as a link, because there's 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 плох, так как это генерируется шаблонным движком :)
7 ответов:
это не вызывает проблем, но это уловка, чтобы сделать то же самое как
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's no href</a>просто делать
a {text-decoration:underline;}и у вас будет "link 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;чтобы предотвратить поведение по умолчанию, вам не нужно делать ничего больше.
при использовании
javascript:в навигации возвращаемое значение выполненного скрипта, если оно есть, становится содержимым нового документа, который отображается в браузере. Элементvoidоператор в JavaScript заставляет возвращаемое значение выражения после него возвращать undefined, что предотвращает это действие. Вы можете попробовать это самостоятельно, скопировать в адресную строку и нажать return:javascript:"hello"результатом является новая страница с только слово "привет". Теперь измените его на:
javascript:void "hello"...ничего не происходит.
когда вы пишите
javascript:сам по себе сценарий не выполняется, поэтому результат выполнения этого сценария также undefined, чтобы браузер ничего не делает. Это делает следующее более или менее эквивалентным:javascript:undefined; javascript:void 0; javascript:за исключением undefined можно переопределить, объявив переменную с тем же именем. Использование
void 0is вообще бессмысленно, и это в основном было сокращено отvoid functionThatReturnsSomething().Как уже было сказано, лучше все же использовать
return false;в обработчике щелчка, чем использоватьjavascript:протокол.
использование "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>
этот метод кажется ОК во всех браузерах, если вы установите onclick с событием jQuery:
<a href="javascript:;">Click me!</a>Как было сказано ранее, href= " # " с изменением хэша url и может вызвать повторную загрузку данных, если вы используете историю (или BA-bbq) JS плагин.
вы могли бы сделать их всех
#' s.вам нужно будет добавить
return false;до конца любой функции, которая называется onclick якоря, чтобы не иметь страницу перейти к началу.