我正在为按钮注册一个click事件,然后该按钮应该执行一个功能,其中为整个页面正文注册一个click事件。
function test_method() {
document.body.addEventListener(
"click",
function do_stuff() {
alert("test");
},
false
);
}
document.getElementById("btn_new_function").addEventListener("click", test_method, false);
我要在此处执行的操作是捕获页面上任何位置的click事件,但仅在单击之前的按钮创建事件之后。相反,发生的事情是当我单击按钮时,身体的点击事件立即触发。是的,这也很有意义,因为按钮也位于体内,是的,但是单击时甚至没有创建该事件,那么为什么触发它?
https://jsfiddle.net/1fj0vkzr/
如何防止这种情况?我只想注册主体的click事件,而不希望它立即执行。
答案 0 :(得分:0)
添加stopPropagation
不会引起即时事件:
function test_method(e) {
e.stopPropagation();
document.body.addEventListener(
"click",
function do_stuff() {
alert("test");
},
false
);
}
此外,您的实现可能会在每次单击按钮时添加侦听器。因此,在点击主体时将创建多个处理程序。
更新
stopImmediatePropagation
在这里匹配得更好(https://developer.mozilla.org/ru/docs/Web/API/Event/stopImmediatePropagation)