Когда мне нужно указать протокол JavaScript?
У меня создалось впечатление, что мне нужно указывать только "протокол" при использовании JavaScript в атрибутах URL, например, в hrefs. Это единственный "полезный" контекст для javascript:
?
Разумный:
<a href="javascript:alert('Hello')">World!</a>
Глупый:
<form onsubmit="javascript:alert('oops!')">
Правильно ли это? Или есть какой-то непонятный случай ошибки/использования, о котором я должен знать?
Ответы
Ответ 1
Псевдо-протокол javascript:
для обработчиков событий будет проигнорирован, он вам не нужен, механизм JavaScript интерпретирует javascript:
как Заявление о этикетке.
Ярлык просто предоставляет идентификатор оператора и позволяет ссылаться на него в другом месте вашей программы.
IMHO, этот псевдопротокол полезен только для букмарклетов...
Рекомендуемая статья:
Ответ 2
Не указывайте его вообще. Неправильно делать это в тегах <a>
, которые вместо этого должны быть закодированы следующим образом:
<a href='#' onclick='alert("Hello")'>World</a>
Это остаток от прошедших дней. Единственный раз, когда я могу подумать, где он будет использоваться, будет в адресной строке браузера (и закладках букмарклета). Храните его на своих страницах.
Ответ 3
Как упоминалось в других ответах, избегайте использования ссылок javascript:
href, и это совершенно необязательно в атрибутах обработчика события. Однако, поскольку теги A
иногда по-прежнему семантически корректны, вам нужно будет поместить что-то в атрибут href
, если вы хотите применить стили CSS :link
и :hover
к элементу в Internet Explorer. В этом случае используйте:
<a href="#" onclick="doSomething(); return false;">Link</a>
или
<a href="javascript://" onclick="doSomething();">Link</a>
В Internet Explorer есть одна (несколько неясная) ошибка с протоколом javascript - он подумает, что вы покидаете страницу при нажатии ссылки. Если вы используете window.onbeforeunload, тогда ваше навигационное сообщение появится в это время. По этой причине мы полностью прекратили использование протокола javascript, поэтому у нас нет этой ошибки, потому что мы забыли проверить ее, когда мы добавляем сообщение навигации на какую-либо страницу.
* Вероятно, я должен был указать версию, когда я впервые написал это. Я вообще не помню, но на всякий случай ошибка присутствует только в браузере, который сейчас не поддерживается, например IE 6 или 7, вы, вероятно, лучше всего протестировать его самостоятельно.
Ответ 4
На практике вы правы.
Вам нужно сделать это в любом случае, где ожидается нечто иное, кроме script. Теоретически вы можете придерживаться javascript:whatever
везде, где вы можете использовать URL-адрес, но это никогда не поддерживалось и теперь официально рекомендуется использовать.
Однако, вы действительно не должны использовать javascript:
вообще. Для ссылок вы можете использовать атрибут onclick
. То, что на самом деле происходит в настоящее время, - это механизм JavaScript, который идентифицирует javascript:
как метку, поэтому код выполняется.
Ответ 5
Вы должны все проверить
http://bytes.com/topic/javascript/answers/504856-javascript-pseudo-protocol-event-handlers
Особенно сообщение "Lasse Reichstein Nielsen", потому что большинство ответов здесь некорректны в некотором роде.
Также помните, что тег привязки вообще не требует href! То есть
<a>hi</a>
действителен xhtml. Проблема с использованием href="#"
заключается в том, что она может прокручиваться до верхней части страницы.. она просто не нужна. Наконец, если вы действительно не хотите, чтобы поведение привязанного тега не использовалось. Вы можете имитировать привязку с помощью css (cursor:pointer
) и таких событий, как mouseenter и mouseleave (что больше работает, но не "ломает" ожидаемое поведение тега привязки).