с 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 55

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

Я обычно не использую href и меняю аспект с помощью css, что делает их похожими на ссылку. Таким образом, вам не придется беспокоиться о следственной связи, за исключением обработчика событий приложения

a {
  text-recoration: underline;
  cursor: pointer;
}

почему все события click, как a href ссылки?

Если вы использовать span теги С :hover CSS и соответствующие события onclick, это позволит полностью обойти проблему.