Подтвердить что ты не робот

Когда мне нужно указать протокол JavaScript?

У меня создалось впечатление, что мне нужно указывать только "протокол" при использовании JavaScript в атрибутах URL, например, в hrefs. Это единственный "полезный" контекст для javascript:?

Разумный:

<a href="javascript:alert('Hello')">World!</a>

Глупый:

<form onsubmit="javascript:alert('oops!')">

Правильно ли это? Или есть какой-то непонятный случай ошибки/использования, о котором я должен знать?

4b9b3361

Ответ 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 (что больше работает, но не "ломает" ожидаемое поведение тега привязки).