с 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 0
is вообще бессмысленно, и это в основном было сокращено от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 якоря, чтобы не иметь страницу перейти к началу.