preventDefault() на теге
у меня есть некоторые html/jquery, который скользит div вверх и вниз, чтобы показать / скрыть его, когда ссылка нажата:
<ul class="product-info">
<li>
<a href="#">YOU CLICK THIS TO SHOW/HIDE</a>
<div class="toggle">
<p>CONTENT TO SHOW/HIDE</p>
</div>
</li>
</ul>
$('div.toggle').hide();
$('ul.product-info li a').click(function(event){
$(this).next('div').slideToggle(200);
}
мой вопрос: Как я могу использовать preventDefault() чтобы остановить ссылку, действующую как ссылка и добавление # до конца моего URL-адреса и перехода в верхнюю часть страницы?
Я не могу понять, правильный синтаксис, я просто получаю сообщение об ошибке сказав, что метод preventDefault() не является функцией.
11 ответов:
попробуйте что-то вроде:
$('div.toggle').hide(); $('ul.product-info li a').click(function(event) { event.preventDefault(); $(this).next('div').slideToggle(200); });вот страница об этом в документация jQuery
предполагается, что вы не используете
return false, как 3 вещи происходят в результате:
- событие.preventDefault ();
- событие.stopPropagation ();
- останавливает выполнение обратного вызова и немедленно возвращается при вызове.
Так что в этом типе ситуации, вы действительно должны использовать только
event.preventDefault();архив статьи - события jQuery: остановка (Mis)с помощью Return False
кроме того, вы можете просто вернуть false из события click:
$('div.toggle').hide(); $('ul.product-info li a').click(function(event){ $(this).next('div').slideToggle(200); + return false; });который остановит запуск A-Href.
обратите внимание, однако, по соображениям удобства использования, в идеальном мире, что href все равно должен идти куда - то, для людей, которые хотят открыть ссылку в новой вкладке ;)
<ul class="product-info"> <li> <a href="javascript:void(0);">YOU CLICK THIS TO SHOW/HIDE</a> <div class="toggle"> <p>CONTENT TO SHOW/HIDE</p> </div> </li> </ul>использовать
javascript: void (0);
Это не JQuery решение, которое я только что протестировал, и оно работает.
<html lang="en"> <head> <script type="text/javascript"> addEventListener("load",function(){ var links= document.getElementsByTagName("a"); for (var i=0;i<links.length;i++){ links[i].addEventListener("click",function(e){ alert("NOPE!, I won't take you there haha"); //prevent event action e.preventDefault(); }) } }); </script> </head> <body> <div> <ul> <li><a href="http://www.google.com">Google</a></li> <li><a href="http://www.facebook.com">Facebook</a></li> <p id="p1">Paragraph</p> </ul> </div> <p>By Jefrey Bulla</p> </body> </html>
почему бы просто не сделать это в CSS?
берем из атрибута href, то в ваш якорь тег
<ul class="product-info"> <li> <a>YOU CLICK THIS TO SHOW/HIDE</a> <div class="toggle"> <p>CONTENT TO SHOW/HIDE</p> </div> </li> </ul>в вашем css,
a{ cursor: pointer; }
после нескольких операций, когда страница должна, наконец, перейти по ссылке, вы можете сделать следующее:
jQuery("a").click(function(e){ var self = jQuery(this); var href = self.attr('href'); e.preventDefault(); // needed operations window.location = href; });
если остановка распространения события не беспокоит вас, просто использовать
return false;в конце обработчика. В jQuery он предотвращает поведение по умолчанию и останавливает пузырящееся событие.
вы можете использовать
return false;от вызова события, чтобы остановить распространение событий, он действует какevent.preventDefault();отрицая его. Или вы можете использоватьjavascript:void(0)в атрибуте href для вычисления данного выражения и последующего возвратаundefinedдля элемент.возврат события при его вызове:
<a href="" onclick="return false;"> ... </a>Void case:
<a href="javascript:void(0);"> ... </a>вы можете увидеть больше о в:каков эффект добавления void (0) для href и "return false" при прослушивании событий щелчка якоря тег?
еще один способ сделать это в JavaScript с помощью
inline onclick,IIFE,eventиpreventDefault():<a href='#' onclick="(function(e){e.preventDefault();})(event)">Click Me</a>
Comments