Предотвратить действие ссылки по умолчанию
8 октября 2010
Иногда приходится использовать ссылки без href или с якорями, поверх которых уже навешивается JavaScript-обработчик. Самыми распространёнными способами являются следующие:
<a href="javascript:void(0)">Я не сработаю</a>
Ужас в чистом виде образца начала 2000-х, если не более ранних, лет. Единственный плюс в том, что работать будет даже в очень древних браузерах.
<a id="my_link" href="#my_anchor">Я не сработаю</a> <script> $(document).ready(function(){ $("#my_link").click(function(){ //... return false; }); }); </script>
Не только предотвратит событие по умолчанию, но и, также, предотвратит всплытие события. Так что данный способ не подходит, если событие всё-таки должно всплыть.
<a id="my_link" href="#my_anchor">Я не сработаю</a> <script> $(document).ready(function(){ $("#my_link").click(function(e){ e.preventDefault(); //... }); }); </script>
Предотвратит только событие по умолчанию. Тут, кстати, частенько забывают про IE6, который про preventDefault ничего не знает и хочет вместо него e.returnValue = false
. Хотя, в jQuery это всё скрыто.
Для получения аналога return false
нужно добавить e.stopPropagation()
и, соответственно, e.cancelBubble = true
для любимого IE.
т.е. return false
= e.stopPropagation
+ e.preventDefault
.
Комментарии RSS по email OK
Что такое всплытие события? Я всегда
использую
Например, если навесить onClick на #parent и кликнуть по одной из ссылок, событие всплывёт до div-а и отработает. При
return false
не всплывёт.Вот тут замечательно описано.
Sam: спасибо за ценное замечание насчет всплытия.
Полезная заметка, я только сегодня об этом вспоминал
А вы не считаете что более правильно вместо
Использовать что-то типа
Если ссылка не загрузит страницу — не считаю.
Автор, подскажите, пож-та, чем плох древний вариант href="javascript:function", если функционал сайта прекрасно работает с такими вызовами?