2010-06-26 2 views
18

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

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

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

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

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

+0

Важное примечание: каждый ответ указывает, что атрибуты 'onclick' больше не должны использоваться. Удостоверьтесь, что вы не пропустите эту очень важную информацию :) – Matchu

+1

Я знаю, я просто демонстрирую ее использование, но в своем коде я всегда использую обработчик событий, не помещая его непосредственно в разметку HTML –

ответ

15

Один бежит JavaScript, который не имеет никаких заявлений, другой бежит JavaScript, который оценивает заявление 0, а затем возвращает undefined.

Neither should be used.

+2

+1 для обескуражения этого шаблона , Будучи действительно педантичным, на самом деле первое содержит оператор * one *, [Empty Statement] (http://bclary.com/2004/11/07/#a-12.3) ';': P – CMS

+0

+1, также для уныния этой картины. –

+3

Неверно, что никакие утверждения не оцениваются в первом случае. Полу-двоеточие представляет собой пустое утверждение, которое ** является ** заявлением. –

5

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

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

5

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

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

«возвращение ложным» предотвращает соединение от фактически последовало.

+2

Итак, если JavaScript доступен, он будет 'DoSomething', и если он не ... он ссылается на верх страницы. Это почти всегда будет ужасной резервной позицией. – Quentin

+0

Примечание от будущего: слава богу, нам больше не нужно беспокоиться о IE6! –

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