Сведения о вопросе

HEIGTH

07:19, 8th August, 2020

Теги

javascript    

Какова цель (если таковая имеется) "javascript:" в тегах обработчика событий?

Просмотров: 385   Ответов: 10

В последнее время я прилагаю согласованные усилия, чтобы улучшить свои навыки javascript, читая как можно больше кода javascript. При этом я иногда видел префикс javascript: , добавляемый к передней части атрибутов обработчика событий в тегах элементов HTML. Какова цель этой приставки? В принципе, есть ли заметная разница между:

onchange="javascript: myFunction(this)"

и

onchange="myFunction(this)"
?



  Сведения об ответе

DAAA

14:14, 19th August, 2020

Вероятно, в вашем примере ничего нет. Я понимаю, что javascript: - это для якорных тегов (вместо фактического href). Вы бы использовали его, чтобы ваш скрипт мог выполняться, когда пользователь нажимает ссылку, но без инициализации перехода обратно на страницу (что будет делать пустой href в сочетании с onclick ).

Например:

<a href="javascript:someFunction();">Blah</a>

Вместо того чтобы:

<a href="" onclick="someFunction();">Blah</a>


  Сведения об ответе

appple

01:03, 17th August, 2020

Он не должен использоваться в обработчиках событий (хотя большинство браузеров работают защищенно и не накажут вас). Я также утверждаю, что он не должен использоваться в атрибуте href якоря. Если браузер поддерживает javascript, он будет использовать правильно определенный обработчик событий. Если браузер этого не делает, ссылка javascript: будет выглядеть сломанной. IMO, лучше указать им на страницу, объясняющую, что они должны разрешить javascript использовать эту функциональность, или еще лучше-не javascript обязательную версию функциональности. Итак, что-то вроде:

<a href="non-ajax.html" onclick="niftyAjax(); return false;">Ajax me</a>

Edit: придумал хорошую причину для использования javascript:. Букмарклеты. Например, он отправляет вас в google reader, чтобы просмотреть каналы rss для страницы:

var b=document.body;
if(b&&!document.xmlVersion){
  void(z=document.createElement('script'));
  void(z.src='http://www.google.com/reader/ui/subscribe-bookmarklet.js');
  void(b.appendChild(z));
}else{
  location='http://www.google.com/reader/view/feed/'+encodeURIComponent(location.href)
}

Чтобы пользователь мог легко добавить этот букмарклет, вы должны отформатировать его следующим образом:

<a href="javascript:var%20b=document.body;if(b&&!document.xmlVersion){void(z=document.createElement('script'));void(z.src='http://www.google.com/reader/ui/subscribe-bookmarklet.js');void(b.appendChild(z));}else{location='http://www.google.com/reader/view/feed/'+encodeURIComponent(location.href)}">Drag this to your bookmarks, or right click and bookmark it!</a>


  Сведения об ответе

baggs

03:12, 26th August, 2020

Он должен использоваться только в теге href.

Это просто смешно.

Общепринятый способ таков:

<a href="/non-js-version/" onclick="someFunction(); return false">Blah</a>

Но чтобы ответить на OP, как правило, больше нет причин использовать javascript: . На самом деле, вы должны прикрепить событие javascript из вашего скрипта, а не встроенное в markup. Но, это пуристская вещь, я думаю : - D


  Сведения об ответе

pumpa

10:18, 9th August, 2020

Происхождение javascript: в обработчике событий на самом деле является просто IE конкретной вещью, так что вы можете указать язык в дополнение к обработчику. Это связано с тем, что vbscript также является поддерживаемым клиентским языком сценариев в IE. Вот пример "vbscript:" .

В других браузерах (как уже было сказано Shadow2531) javascript: -это просто метка и в основном игнорируется.

href="javascript:..." можно использовать в ссылках для выполнения кода javascript, как указывает DannySmurf.


  Сведения об ответе

DAAA

11:20, 23rd August, 2020

Я не являюсь авторитетом в JavaScript и, возможно, более тупым, чем Аскер, но AFAIK, разница в том, что префикс javascript: предпочтителен/необходим в URI-контекстах, где аргумент может быть также традиционным HTTP URL, как и триггер JavaScript.

Таким образом, мой интуитивный ответ будет заключаться в том, что, поскольку onChange ожидает JavaScript, префикс javascript: является избыточным (если не прямо ошибочным). Однако вы можете написать javascript:myFunction(this) в адресной строке, и эта функция будет запущена. Без javascript: Ваш браузер будет пытаться интерпретировать myFunction(this) как URL и попытается получить информацию о DNS, перейти к этому серверу и т. д...


  Сведения об ответе

KOMP

16:56, 10th August, 2020

javascript: в коде JS (как и в атрибуте onclick) это просто метка для использования с инструкциями continue/goto label, которые могут поддерживаться или не поддерживаться браузером (вероятно, нигде). Это может быть зипзамбам: вместо этого. Даже если метка не может быть использована, браузеры все равно принимают ее, поэтому она не вызывает ошибки.

Это означает, что если кто-то бросает бесполезную метку в атрибут onclick, он, вероятно, не знает, что делает, и просто копирует и вставляет или делает это по привычке из-за того, что делает ниже.

javascript: в атрибуте href означает Javascript URI.

Пример :

javascript:(function()%7Balert(%22test%22)%3B%7D)()%3B


  Сведения об ответе

ASER

21:19, 5th August, 2020

Я не знаю, означает ли префикс javascript: что-нибудь в атрибутах onevent , но я знаю, что они раздражают в тегах привязки при попытке открыть ссылку в новой вкладке. href следует использовать как запасной вариант и никогда не присоединять javascript к ссылкам.


  Сведения об ответе

park

20:25, 23rd August, 2020

@mercutio

Это просто смешно.

Нет, это не смешно, javascript: это псевдо-протокол, который действительно может использоваться только в качестве предмета ссылки, так что он совершенно прав. Ваше предложение действительно лучше, но лучше всего использовать ненавязчивые методы javascript для перебора элементов HTML и добавления поведения программно, как это используется в библиотеках типа jQuery.


  Сведения об ответе

lourence

11:24, 28th August, 2020

В принципе, есть ли какая-то заметная разница между: onchange="javascript: myFunction(this)" и onchange="myFunction(this)" ?

Предполагая, что вы имели в виду href="javascript: myFunction(this)" , да, есть, особенно при загрузке контента с помощью javascript. Использование протокола javascript: pseudo делает контент недоступным для некоторых людей и всех поисковых систем, в то время как использование реального href и последующее изменение поведения ссылки с помощью javascript делает контент доступным, если javascript выключен или недоступен в конкретном клиенте.


  Сведения об ответе

P_S_S

13:19, 4th August, 2020

Флубба:

Использование javascript: в HREF разрывает "Open in New Window" и "Open in New Tab" в A Firefox и других браузерах.

Это не "wrong", но если вы хотите сделать свой сайт трудным для навигации...


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться