有办法改变jQuery事件发生的顺序吗?我还没有找到一个明确的答案。
我有一个外型和一个内层。每当您单击内部div时,内部div事件首先会触发。然后是外部div事件,即使一个事件是在之前和之后创建的。
https://jsfiddle.net/nLvaehky/5/
$("#outerDiv").on("mousedown", function() {
alert('outer div clicked!');
});
$("#innerDiv").on("mousedown", function() {
alert('inner div clicked!');
});
发布于 2018-09-20 17:42:37
您需要使用stopPropagation()
阻止事件冒泡到父div:
$("#outerDiv").on("mousedown", function() {
alert('outer div clicked!');
});
$("#innerDiv").on("mousedown", function(e) {
e.stopPropagation();
alert('inner div clicked!');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="outerDiv" style="background-color:blue;">
<br /><br /><br /><br />
<br /><br /><br /><br />
<div id="innerDiv" style="background-color:green;">
<br /><br /><br /><br />
</div>
<br /><br /><br /><br />
</div>
发布于 2018-09-20 17:55:10
执行的顺序取决于如何将它们放在js文件中(从上到下,从左到右)。但在本例中,它首先触发innerDiv
事件,因为这是您单击的元素。如果您将$("#outerDiv").on("mousedown" ...)
放在第一位并不重要。
但是它执行outerDiv
的outerDiv
事件,因为单击在DOM树中向上传播,所以如果您想停止传播,可以使用"Zakaria“应答中提到的stopPropagation()
事件。
https://stackoverflow.com/questions/52430433
复制相似问题