Ответ 1
В одном выполняется JavaScript, который не имеет операторов, другой выполняет JavaScript, который вычисляет оператор 0
, а затем возвращает undefined
.
Я хотел бы знать, в чем разница между javascript:;
и javascript:void(0);
, если я использую их в атрибуте href
для привязки a
anchor (link)
<a href="javascript:;" onclick="DoSomething();">Link</a>
<a href="javascript:void(0);" onclick="DoSomething();">Link</a>
Я вижу, что они действуют одинаково во всех браузерах, но какова техническая разница?
С уважением, Магди
В одном выполняется JavaScript, который не имеет операторов, другой выполняет JavaScript, который вычисляет оператор 0
, а затем возвращает undefined
.
Только последнее javascript:void(0);
более читаемо и принятое соглашение, в котором говорится, что этот код ничего не делает.
Стоит отметить, что отраслевые стандарты прошли долгий путь в отношении этого синтаксиса. Вы должны изучить Progressive Enhancement.
Я согласен с Дэвидом, что ни один из них не должен использоваться. Псевдо-протокол javascript может помещать страницу в состояние ожидания в некоторых браузерах, что может иметь неожиданные последствия. В качестве одного примера я потратил несколько часов на отладку веб-приложения, которое разбивало IE6 всякий раз, когда кто-то щелкал ссылку javascript: вскоре после загрузки страницы. Оказалось, что страница, входящая в состояние ожидания, противоречит Flash-ролику, пытающемуся инициализировать. Я решил проблему, заменив ссылку на одну в этом формате:
<a href="#" onclick="DoSomething(); return false;">Link</a>
"return false" предотвращает фактическое выполнение ссылки.