2008-08-22 2 views
16

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

onchange="javascript: myFunction(this)" 

и

onchange="myFunction(this)" 

?

ответ

18

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

Например:

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

Вместо:

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

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

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

1

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

4

Его следует использовать только в теге href.

Это смешно.

Принятый способ заключается в следующем:

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

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

12

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

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

Редактировать: Мысль о хорошей причине для использования javascript :. Букмарклеты. Например, это один посылает вам читатель Google для просмотра 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> 
1

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

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

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

Example:

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

@mercutio

Это смешно.

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

0

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

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

1

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

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

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

0

Flubba:

Использование javascript: в HREF разрывов «Открыть в новом окне» и «Открыть в новой вкладке» в Firefox и других браузерах.

Это не «неправильно», но если вы хотите, чтобы ваш сайт был трудно ориентироваться ...

Смежные вопросы