PreventDefault () в теге <a>

У меня есть 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() is not a function.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
141
0
322 588
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

Попробуйте что-нибудь вроде:

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

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

В качестве альтернативы вы можете просто вернуть false из события щелчка:

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

Что остановило бы запуск A-Href.

Обратите внимание, однако, из соображений удобства использования, в идеальном мире href все равно должен куда-то идти, для людей, которые хотят открывать ссылку в новой вкладке;)

да, я думаю, что отвечал на то, что я думал о твоих намерениях, а не на вопрос :)

Kent Fredric 05.11.2008 20:28

Как бы то ни было, много лет назад было рекламировано, что вы должны вернуть -1, чтобы предотвратить срабатывание href. Я не думаю, что это больше работает в ЛЮБЫХ браузерах, и вы должны «вернуть false», чтобы предотвратить скачки страницы.

Randy 12.06.2019 22:20

Почему бы просто не сделать это в 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;
    }

Таким образом вы потеряете атрибут: hover в плохих браузерах (то есть в семействе).

Strae 27.04.2010 17:23

Если остановка распространения события вас не беспокоит, просто используйте

return false;

в конце вашего обработчика. В jQuery он предотвращает поведение по умолчанию и останавливает всплытие событий.

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

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

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

Архив статьи - События jQuery: прекратить (неправильно) использовать return False

Я только что протестировал это решение, отличное от 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>

Установите атрибут href как href = "javascript:;"

<ul class = "product-info">
  <li>
   <a href = "javascript:;">YOU CLICK THIS TO SHOW/HIDE</a>
  <div class = "toggle">
    <p>CONTENT TO SHOW/HIDE</p>
  </div>
 </li>
</ul>

Хорошая жемчужина для якорей - спасибо! Может ли кто-нибудь описать, почему это работает?

justinpage 24.10.2014 04:42

Атрибут @KLVTZ href тега привязки (a) может быть не пустым ... Но мы можем установить его на javascript:<code-here>, это допустимо. Затем мы вводим для <code-here> просто пустой оператор, добавляя точку с запятой. Таким образом ссылка ничего не делает.

Stijn de Witt 06.11.2015 16:17

Большое спасибо! Это позволило мне реализовать функцию кнопки возврата (запоминание состояния, установленного pushState () на страницах) в хлебные крошки CalePHP, например $ this-> Html-> addCrumb ('Sessions', 'javascript: window.history.back (); ');

Patronaut 22.04.2018 12:06
<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);

@AhmadSharif Я тестировал сегодня FF 40.0.3 и IE 11, есть еще работа.

HATCHA 31.08.2015 07:37

Я думаю, что void (0) может быть уродливым / запутанным для пользователей, которые могут видеть это, когда они наводят ссылку. Фактически вы можете поместить любой действительный JS, поэтому я хотел бы добавить комментарий, описывающий, что он делает. например href = "javascript:// Send Email"

colllin 11.11.2016 01:10

После нескольких операций, когда страница должна наконец перейти по ссылке <a href"...">, вы можете сделать следующее:

jQuery("a").click(function(e){
    var self = jQuery(this);
    var href = self.attr('href');
    e.preventDefault();
    // needed operations

    window.location = href;
});

Зачем делать preventDefault, а потом делать действия по умолчанию самостоятельно? Просто сделайте то, что вам нужно добавить, и пусть значение по умолчанию останется в силе.

nathanvda 13.01.2015 21:25

Вы можете использовать return false; из вызова события, чтобы остановить распространение события, он действует как event.preventDefault();, отменяя его. Или вы можете использовать javascript:void(0) в атрибуте href, чтобы оценить данное выражение, а затем вернуть undefined элементу.

Возврат события при его вызове:

<a href = "" onclick = "return false;"> ... </a>

Пустой случай:

<a href = "javascript:void(0);"> ... </a>

Вы можете узнать больше о: Каков эффект добавления void (0) для href и return false в прослушиватель событий щелчка тега привязки?

1 - Простой способ:

<a href = "javascript:;">Click Me</a>

2 - с использованием void (0):

<a href = "javascript:void(0);">Click Me</a>

3 - Использование preventDefault():

<a href='#' onclick = "event.preventDefault()">Click Me</a>

4 - Еще один способ сделать это в Javascript с использованием inline onclick, IIFE, event и preventDefault():

<a href='#' onclick = "(function(e){e.preventDefault();})(event)">Click Me</a>

Привет или просто <a href='#' onclick = "event.preventDefault()">Click Me</a>

ankabot 12.07.2020 05:07

@ankabot ага. Я считаю, что это есть в некоторых других ответах. Я просто хотел добавить ответ другим способом, о котором не упоминалось. Также, чтобы показать другой способ работы с Javascript. (есть неограниченное количество способов делать что-то в JS!). Основные ответы легче читать и практичнее. Это просто теория, а не практика :)

A-Sharabiani 03.02.2021 22:13

Другие вопросы по теме