【问题标题】:Stopping click event using mousedown only works when triggering an alert使用 mousedown 停止单击事件仅在触发警报时有效
【发布时间】:2016-05-20 23:19:58
【问题描述】:

我试图通过从容器上的 mousedown 事件返回 false 来防止运行元素的子元素的已定义 onclick 事件,如下所示:

submit_container.mousedown(function(event){
    return false;
});

如果我这样写我的代码,它就行不通。但是,如果我先添加警报,则点击事件实际上已停止:

submit_container.mousedown(function(event){
    alert('Alert');
    return false;
});

here 也提到了同样的问题,但遗憾的是没有一个答案能解决这个问题。

编辑:JSfiddle example。我想要第二个链接的行为,但不必触发警报

【问题讨论】:

  • 我不确定我是否完全关注。你能提供一个jsfiddle吗?我认为您可能正在寻找 event.stopPropagation(),但我不能确定。
  • 尝试添加 event.preventBubble()?
  • @tpdietz 为问题添加了 JSfiddle
  • @Radical,谢谢。我现在绝对完全理解这个问题。我对这个问题没有很好的解决方案,但至少可以提供一些见解。锚元素将是第一个接收事件的元素。当 mousedown 事件在容器的事件处理程序上触发时,锚元素已经接收到该事件。试图阻止锚元素的事件处理程序的动作可能应该发生在锚元素上(而不是容器)。我想出了几个玩弄 jsFiddle 的解决方案,但是唉,它们都是丑陋的 hack。
  • 我同意阻止对元素本身的操作会好得多,但我处于动态加载元素的情况,据我所知,我无法挂钩上面代码加载的时候直接加载元素,所以我要通过容器。

标签: javascript jquery onclick mousedown


【解决方案1】:

mousedown 对容器类起作用。您的问题是 a href 附加了一个单击事件而不是鼠标按下。因此,您应该在容器上使用 onclick 或 href 作为事件传播将发生并冒泡到 parent 。您仍然可以阻止这种情况发生。

示例。

submit_container.click(function(event){
    event.stopPropagation();
    event.preventDefault();
    return false;
});

希望对你有帮助

【讨论】:

  • 这确实有助于解决我上面描述的问题,所以已经谢谢你了!不过,我的实际问题结果要复杂一些。我在容器中的元素实际上附加了一个自定义的onclick属性,我想在不同的时间点调用它(所以onclick我基本上是先要preventDefault,然后做其他事情,最终仍然运行onclick代码)。见this jsfiddle。如您所见,单击链接确实不会打开新选项卡,但仍会执行 onclick 事件。对此有何想法?
【解决方案2】:

你在使用 jQuery 吗?尝试使用“preventDefault”方法:

submit_container.mousedown(function(event){
    event.preventDefault();
    return false;
});

【讨论】:

  • 他在他的问题中链接的答案中使用了这种方法,但没有奏效。
  • 确实,我尝试了 preventDefault、preventPropagation、preventImmediatePropagation 的所有组合,结果都相似
  • 在这种情况下似乎可以阻止浏览器行为,您应该改用“点击”事件。
猜你喜欢
  • 2023-03-27
  • 2020-10-28
  • 2014-12-28
  • 2015-12-22
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多