Javascript :;vs javascript: void (0); - PullRequest
20 голосов
/ 27 июня 2010

Я хотел бы знать, в чем разница между javascript:; и javascript:void(0);, если я использую их в атрибуте href для a привязки (ссылка)

<a href="javascript:;" onclick="DoSomething();">Link</a>

<a href="javascript:void(0);" onclick="DoSomething();">Link</a>

Я вижу, что они работают одинаково во всех браузерах, но в чем техническая разница?

С уважением, Магди

Ответы [ 3 ]

17 голосов
/ 27 июня 2010

Один запускает JavaScript, который не имеет операторов, другой запускает JavaScript, который оценивает оператор 0, а затем возвращает undefined.

Ни один из них не должен использоваться.

6 голосов
/ 27 июня 2010

Я согласен с Дэвидом, что ни один из них не должен использоваться. Псевдопротокол javascript может перевести страницу в состояние ожидания в некоторых браузерах, что может привести к неожиданным последствиям. В качестве одного примера я потратил часы, пытаясь отладить веб-приложение, в котором происходил сбой IE6 всякий раз, когда кто-то нажимал на ссылку javascript: вскоре после загрузки страницы. Оказалось, что страница, входящая в состояние ожидания, конфликтует с Flash-фильмом, который пытается инициализировать. Я решил проблему, заменив ссылку на ссылку в следующем формате:

<a href="#" onclick="DoSomething(); return false;">Link</a>

«return false» не позволяет перейти по ссылке.

5 голосов
/ 27 июня 2010

Только то, что последний javascript:void(0); является более читабельным, и общепринятым соглашением о том, что этот код ничего не делает .

Стоит отметить, что отраслевые стандарты прошли долгий путь в отношении этого синтаксиса,Вы должны посмотреть на прогрессивное улучшение.

...