我正在测试一个场景,我需要在选择器上有2个点击事件(例如2个链接)。
我相信事件被绑定到事件初始化的元素自上而下的顺序。
通用案例
$('a').on('click', function(e) {
e.preventDefault();
console.log("Click me !!!");
});
$('a').on('click', function(e) {
e.preventDefault();
console.log("Click me again clicked!!!");
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<a href="#">Click me</a>
<a href="#">Click me again </a>
&#13;
正如预期的那样,我按照正确的顺序在控制台中看到以下两行。
Click me !!!
Click me again clicked!!!
但是当我将第一个事件委托给身体并执行相同的动作时,顺序被颠倒了,这是我没想到的。
$('body').on('click', 'a', function(e) {
e.preventDefault();
console.log("Click me !!!");
});
$('a').on('click', function(e) {
e.preventDefault();
console.log("Click me again clicked!!!");
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<a href="#">Click me</a>
<a href="#">Click me again </a>
&#13;
Click me again clicked!!!
Click me !!!
我很困惑,为什么会发生这种情况,因为我预计事件将按照他们所受的顺序被解雇。
我想这样做的原因,在一个场景中我想阻止第二个事件在委托事件出现时触发。
我也尝试使用e.stopPropagation
,认为事件会停止冒泡并且可以阻止第二个事件被触发。但是,由于第二次事件似乎是先发射,所以没有用。
任何想法都会受到赞赏,因为我想弄清楚为什么会这样。