点击事件立即触发

时间:2019-01-16 12:53:37

标签: javascript

我正在为按钮注册一个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事件,而不希望它立即执行。

1 个答案:

答案 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