【发布时间】:2019-04-08 08:42:13
【问题描述】:
我有一个关于如何停止事件传播的问题。
假设我有两个 div,一个容器和一个内容。
当我在内容内完成点击(鼠标按下和鼠标向上)时,我可以使用 preventDefault() 停止传播
但是,如果我在内容内按下鼠标,将鼠标移到外面并释放按钮,则会触发容器处理程序。
我不关心内容中的事件,但在这种情况下我需要阻止事件通过容器。
我做了一个小提琴来测试它: https://jsfiddle.net/Lq7v50nw/
JS:
$('#container').on('click', function(){
alert('click in container')
});
$('#content').on('click', function(ev){
ev.stopPropagation();
alert('click in content')
});
HTML
<div id="container">
<div id="content"></div>
</div>
有没有办法实现这种行为? 谢谢。
编辑(关于我已经尝试过的更多信息) 更改 mousedown 的单击事件。 这样做的问题是他们需要在内容内单击并拖动,有时超出内容的拖动会触发容器处理程序。 我不能使用 mousedown。
【问题讨论】:
-
我不确定您是否可以通过单击或 mousedown 事件为您的特定用例实现此目的。不过,您可以尝试同时跟踪 mousedown 和 mouseup 事件,并使用代码检查第一次单击的元素以及释放鼠标的位置。
-
这是我尝试的第一件事。这样做的问题是他们需要在内容内单击并拖动,有时超出内容的拖动会触发容器处理程序。我不能使用 mousedown。
-
我认为您不能在“内容级别”上执行此操作,因为从技术上讲,您确实可以单击容器。您只能在“容器级别”停止点击传播。在这种情况下,Mousedown 和 MouseUp 事件对您没有帮助。
标签: javascript jquery