如何通过js实现添加事件监听和移除事件监听

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过js实现添加事件监听和移除事件监听相关的知识,希望对你有一定的参考价值。

直接用js实现比较麻烦,不同版本的浏览器(主要是低版本的)支持的方法会不一样。

建议使用jquery实现:

添加事件例:

$("button").on("click", function()
    console.log("clicked");
);

移除事件例:

$("button").off("click");

文档链接:http://api.jquery.com/on/

参考技术A <!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
    .detail_info 
        position: absolute;
        display: none;
    
    </style>
</head>
<body>
    <input type ="button" value="测试增加/移除监听" id="btn_bind"/>
    <div style="position: relative;" id="box_content">
        <input type="text" class="text" />
        <input type="text" class="text" />
 
        <!--浮动的详细信息-->
        <div class="detail_info" id="box_detail">
            浮动提示信息
        </div>
    </div>
    <script type="text/javascript">
    (function () 
        document.getElementById("btn_bind").addEventListener("click", function () 
            if(this.bindStatue) 
                removeEvent();
             else 
                bindEvent();
            
 
            this.bindStatue = !this.bindStatue;
        );
 
        function removeEvent() 
            var inputs = document.querySelectorAll(".text");
            for(var i = 0, length = inputs.length; i < length; i++) 
                inputs[i].removeEventListener("mousemove", showDetail);
                inputs[i].removeEventListener("mouseout", hideDetail);
            
        
 
        function bindEvent() 
            var inputs = document.querySelectorAll(".text");
            for(var i = 0, length = inputs.length; i < length; i++) 
                inputs[i].addEventListener("mousemove", showDetail);
                inputs[i].addEventListener("mouseout", hideDetail);
            
        
 
        function showDetail(e) 
            var e = e || window.event,
                box = document.getElementById("box_detail"),
                content = document.getElementById("box_content");
 
            box.style.display = "block";
            box.style.top = e.clientY - content.offsetTop + "px";
            box.style.left = e.clientX - content.offsetLeft + "px";
        
 
        function hideDetail() 
            document.getElementById("box_detail").style.display = "none";
        
    )();
    </script>
</body>
</html>

js添加事件和移除事件:addEventListener()与removeEventListener()

参考技术A addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作。
它们都接受3个参数:如 addEventListener("事件名" , "事件处理函数" , "布尔值"); (注:事件名不含"on",如“click”) 现在的版本可以省略第三个参数,默认值为false

通过addEventListener()添加的事件处理程序只能使用removeEventListener()来移除;移除时传入的参数与添加处理程序时使用的参数相同。这也意味着通过addEventListener()添加的匿名函数无法移除

这个例子中,使用addEventListener()添加一个事件处理程序。虽然调用removeEventListener(0是看似使用了相同的参数,但实际上,第二个参数与传入addEventListener()中的那一个完全不同的函数。而传入removeEventListener()中的事件处理程序函数必须与传addEventListener()中的相同

重写后的这个例子在addEventListener()和removeEventListener()中用的是相同的函数。

1:相同事件绑定和解除,需要使用共用函数;绑定和解除事件时 事件没有"on" 即onclick写成click
2:共用函数不能带参数;

布尔值参数是true,表示在捕获阶段调用事件处理程序;就是最不具体的节点先接收事件,最具体的节点最后接收事件

以上是关于如何通过js实现添加事件监听和移除事件监听的主要内容,如果未能解决你的问题,请参考以下文章

安卓监听触摸事件,以及各种按键 处理

vue 监听函数发生事件

在uniapp中 监听回车事件

移除类添加的事件监听器

怎样理解js中的事件监听

移除另一个脚本设置的点击事件监听器