【问题标题】:Prevent href from opening link but still execute other bind events阻止 href 打开链接但仍执行其他绑定事件
【发布时间】:2012-08-31 05:21:06
【问题描述】:

我想阻止链接打开页面。所以我写了这个:

$("a").click(function(e) {
    e.preventDefault()
}

太棒了!但这阻止了我的其他活动:

$(".toolbar a").click(function(e) {
    ...action...
}

当然,我可以通过一些测试将我的操作添加到第一个事件,但是有没有一种优雅的方法来阻止 only href 事件执行?

编辑

事实上它有效,对不起。请参阅@raina77ow fiddle 在这里工作:http://jsfiddle.net/HeFS6/

【问题讨论】:

  • 其他事件是什么意思..?你能在代码中显示出来吗...?
  • 好吧,e.preventDefault() 不会阻止事件传播;它完全符合您的需要。检查this fiddle 以获取“通用特定”组合的示例;你的代码有什么不同?
  • 我建议也检查this article;它显示了 jQuery 中四个事件消息处理语句之间的差异。
  • 确实有效,我可能对绑定事件有问题。它现在可以工作了,而且我没有找到我有问题的代码。感谢您的回答!

标签: jquery events click preventdefault


【解决方案1】:

请改用return false。您可以看到下面的代码正在运行here

​$("a").click(function() {
    return false;
});

$(".toolbar a").click(function() {
    alert("Do something");
});​

正如 @raina77owthis article 所指出的,使用return false 与调用event.preventDefault()event.stopPropagation() 相同。由于我过去在某些代码上没有return false 时遇到过麻烦,所以我总是建议它。

但这里最重要的是绑定顺序:您的最后一个绑定将是您第一个执行的代码。所以,小心点,走吧。

【讨论】:

  • 完全错误:return false = event.preventDefault(); event.stopPropagation();
  • 好吧,return false 不要停止事件冒泡。这句话有什么问题?我不是在谈论preventDefault()stopPropagation(),而只是建议使用return false,这从未在我的代码中造成问题。
  • return false 相当于同时调用.preventDefault().stopPropagation()(但不是.stopImmediatePropagation())。因此它确实停止了事件冒泡。请查看我在 cmets 中链接到此问题的文章。
  • 我知道这篇文章。我想我不清楚:return false 不会阻止 jQuery 链接的事件的传播。我不是在谈论原生 JavaScript 事件冒泡。嗯,代码解决了OP问题,不过我也会用文章链接更新答案。
  • 对不起,return false 究竟是如何解决 OP 的问题的? ) 它不会比.preventDefault() 阻止本机事件冒泡。
【解决方案2】:

代替e.preventDefault(),你试过return false吗?这也应该防止浏览器默认行为。

【讨论】:

    【解决方案3】:

    没有 href 事件。如果阻止默认点击,这就是你最终的结果。您应该只使用更具体的选择器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多