<a> 标签上的 preventDefault()

IT技术 javascript jquery
2021-02-08 12:16:54

我有一些 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() 不是函数。

6个回答

尝试类似:

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

这是jQuery 文档中关于此的页面

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>
href锚标签( a) 的@KLVTZ属性可能不为空...但我们可以将其设置为javascript:<code-here>,即合法/有效。然后我们<code-here>通过添加分号来输入一个空语句。这样链接什么都不做。
2021-03-15 12:16:54
锚的漂亮小宝石——谢谢!任何人都可以描述为什么这有效?
2021-03-17 12:16:54
非常感谢!这使我能够像这样 $this->Html->addCrumb('Sessions', 'javascript:window.history.back(); ');
2021-03-21 12:16:54

建议您不要使用return false,因为结果会发生 3 件事:

  1. event.preventDefault();
  2. event.stopPropagation();
  3. 停止回调执行并在调用时立即返回。

所以在这种情况下,你真的应该只使用 event.preventDefault();

文章存档 - jQuery 事件:停止(错误)使用 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 onclickIIFEeventpreventDefault()

<a href='#' onclick="(function(e){e.preventDefault();})(event)">Click Me</a>
你好,或者干脆 <a href='#' onclick="event.preventDefault()">Click Me</a>
2021-03-14 12:16:54
@ankabot 是的。我相信这是在其他一些答案中。我只是想以未提及的不同方式添加答案。还可以在 Javascript 中展示不同的做事方式。(在 JS 中有无限的做事方式!)。最佳答案更易于阅读且更实用。这只是理论而不是实践:)
2021-04-05 12:16:54

或者,您可以从单击事件中返回 false:

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

这将阻止触发 A-Href。

但是请注意,出于可用性原因,在理想的世界中,对于想要在新选项卡中打开链接的人来说,href 仍然应该放在某个地方;)

就其value而言,多年前有人吹捧您应该返回 -1 以防止触发 href。我认为这不再适用于任何浏览器,您必须“返回 false”以防止页面跳转。
2021-03-16 12:16:54
是的,我想我在回答我认为你的意图而不是问题:)
2021-03-22 12:16:54