我对第二个事件处理程序有疑问。这有点复杂,因为我将我的脚本加载到其他页面(我无法修改该页面)并且这个脚本对点击事件做出反应。例如,当我单击该客户端页面的任何段落时,我的脚本会向我显示警报“单击”。如果该客户没有自己的点击处理程序,它就可以工作。我的点击功能什么时候永远不会运行。
此时脚本非常简单:
jQuery('body').click(function(event){
alert('clicked');
});
有什么提示吗?对不起我的英语不好。
我对第二个事件处理程序有疑问。这有点复杂,因为我将我的脚本加载到其他页面(我无法修改该页面)并且这个脚本对点击事件做出反应。例如,当我单击该客户端页面的任何段落时,我的脚本会向我显示警报“单击”。如果该客户没有自己的点击处理程序,它就可以工作。我的点击功能什么时候永远不会运行。
此时脚本非常简单:
jQuery('body').click(function(event){
alert('clicked');
});
有什么提示吗?对不起我的英语不好。
对于click
像body
. 元素上的处理程序可以通过取消冒泡event.stopPropagation()
。如果他们处理事件,他们通常会这样做。
您不能在页面附加的处理程序之前获取事件,至少不能以任何直接的方式,因为即使您将处理程序附加到实际元素,它们也会按照附加的顺序执行,所以你的将在其他人之后。这没关系,除非他们使用event.stopImmediatePropagation()
,这甚至阻止了附加到同一元素的其他处理程序被调用。
一个例子有帮助:让我们看看这个 HTML:
<body>
<div id="target">........</div>
</body>
这些处理程序按以下顺序附加:
$("#target").click(function() {
console.log("First direct handler");
});
$("#target").click(function() {
console.log("Second direct handler");
});
$(document.body).click(function() {
console.log("'body' handler");
});
如果我单击div
,我们将在控制台中看到:Live Example | 直播源
第一个直接处理程序 第二直接处理程序 “身体”处理程序
现在,让我们更改第一个处理程序并让其他处理程序保持不变:
$("#target").click(function(e) {
console.log("First direct handler");
e.stopPropagation();
});
现在点击给我们这个: Live Example | 直播源
第一个直接处理程序 第二直接处理程序
由于第一个处理程序停止传播,body
因此未调用处理程序。
让我们再次更改第一个处理程序:
$("#target").click(function(e) {
console.log("First direct handler");
e.stopImmediatePropagation();
});
现在点击给我们这个: Live Example | 直播源
第一个直接处理程序
我们甚至没有接到对第二个处理程序的调用,因为第一个处理程序停止了立即传播。