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() не является функцией.

378   11  

11 ответов:

попробуйте что-то вроде:

$('div.toggle').hide();
$('ul.product-info li a').click(function(event) {
    event.preventDefault();
    $(this).next('div').slideToggle(200);
});

вот страница об этом в документация jQuery

предполагается, что вы не используете return false, как 3 вещи происходят в результате:

  1. событие.preventDefault ();
  2. событие.stopPropagation ();
  3. останавливает выполнение обратного вызова и немедленно возвращается при вызове.

Так что в этом типе ситуации, вы действительно должны использовать только event.preventDefault();

архив статьи - события jQuery: остановка (Mis)с помощью Return False

установить href

кроме того, вы можете просто вернуть 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

    Ничего не найдено.