2016-06-10 85 views
1

比方说,我们有这样的:点击事件jQuery的控制命令

$(document.body).on("click", "div", function() { 
    console.log(1); 
}); 

$("div").on("click", function() { 
    console.log(2); 
}); 

现在,当我点击<div>,输出为:

2 
1 

有没有办法有相反的顺序,因为我不能修改或选择更改顺序的事实?

编辑

我现在的解决方法是一个setTimeout(),但我不希望有这样的,因为它创建丑陋的毛刺。

+0

只是换两个事件的console.log();) –

+0

我认为,第二个会永远火首先,因为它绑定到'div'。这意味着用户点击'div',然后事件就会起泡并触及绑定到主体的第一个事件。 –

回答

0

你说什么有关修改回调函数

$(document.body).on("click", "div", function() { 
    setTimeOut(function(){ console.log(1);},5}); 
}); 

$("div").on("click", function() { 
    console.log(2); 
}); 
+0

是的,这就是我现在有,但它创造丑陋的毛刺... – kraftwer1

1

事件传播了低谷DOM,所以有强迫身体上点击开火DIV点击之前确实没有切实可行的办法。然而,一个简单的解决方法,这一问题将以下内容:

var somethingOrOther = function() { 
    console.log(1); 
} 

$(document.body).on("click", "div", function() { 
    somethingOrOther(); 
}); 

$("div").on("click", function(event) { 
    event.stopPropagation(); 
    somethingOrOther(); 
    console.log(2); 
}); 

event.stopPropagation();确保点击不会泡沫进一步与DOM和身体上的点击不会触发,但点击股利只有当。