绑定多个单击事件时的奇怪行为 - 绑定到选择器VS事件委派

时间:2015-07-17 17:59:04

标签: javascript jquery javascript-events click

我正在测试一个场景,我需要在选择器上有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;
&#13;
&#13;

正如预期的那样,我按照正确的顺序在控制台中看到以下两行。

Click me !!!
Click me again clicked!!!

但是当我将第一个事件委托给身体并执行相同的动作时,顺序被颠倒了,这是我没想到的。

&#13;
&#13;
$('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;
&#13;
&#13;

Click me again clicked!!!
Click me !!!

我很困惑,为什么会发生这种情况,因为我预计事件将按照他们所受的顺序被解雇。

我想这样做的原因,在一个场景中我想阻止第二个事件在委托事件出现时触发。

我也尝试使用e.stopPropagation,认为事件会停止冒泡并且可以阻止第二个事件被触发。但是,由于第二次事件似乎是先发射,所以没有用。

任何想法都会受到赞赏,因为我想弄清楚为什么会这样。

0 个答案:

没有答案