事件监听(addEventListener())及其移除(removeEventListener)

本文介绍了一个简单的JavaScript示例,展示了如何使用不同浏览器的方法来为DOM元素添加和移除点击及鼠标悬停事件监听器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

html

<div id="box"></div>

js

<script type="text/javascript">
    var box = document.getElementById("box");
    function clickfn(){
        console.log("传到box上了");
    }
    function clickhandle(){
        console.log("aa");
    }


    function addEvent( obj,type,fn,capture ){
        if( obj.addEventListener ){
            obj.addEventListener( type,fn,false );
        }else if( obj.attachEvent ){
            obj.attachEvent('on',type,fn );
        }else{
            obj[ 'on'+type ] = fn;
        }
    }
    //移除监听函数
    function removeEventHandle(target,type,fn,capture){
        if(target.addEventListener){ //如果为true的话,进入
            target.removeEventListener(type,fn,capture);
        }else if( target.attachEvent ){
            //IE8以下版本
            target.detachEvent('on'+ type,fn,capture);
        }
    }
    addEvent(box,'click',clickfn,false);
    addEvent(box,'mouseover',clickhandle,false);
    removeEventHandle(box,'mouseover',clickhandle,false);
</script>
### 如何在 JavaScript 中移除通过 `addEventListener` 添加的事件 要成功移除由 `addEventListener` 方法绑定的事件监听器,必须满足以下几个条件: 1. **保存原始函数引用** 移除事件监听器时,需要提供与添加时完全相同的回调函数引用。因此,在调用 `removeEventListener` 之前,应保留该回调函数的引用[^1]。 2. **使用相同的参数** 调用 `removeEventListener` 的时候,其三个参数(即目标对象、事件名称以及处理程序)需严格匹配当初用于注册事件监听器的参数[^2]。 以下是实现这一功能的具体方法及其代码示例: #### 示例代码 ```javascript // 定义一个事件处理器并将其赋给变量 handler function handler(event) { console.log('Event triggered:', event.type); } // 获取 DOM 元素 const button = document.querySelector('#myButton'); // 使用 addEventListener 绑定事件 button.addEventListener('click', handler); // 随后可以安全地移除这个事件监听器 button.removeEventListener('click', handler); ``` 上述例子展示了如何定义一个名为 `handler` 的函数,并利用它作为事件监听器来响应点击操作。当不再需要此行为时,则可以通过传递同样的 `handler` 函数至 `removeEventListener` 来解除绑定[^3]。 需要注意的是,如果尝试删除匿名或者立即执行表达式的回调函数,由于无法再次获取到确切的函数实例,所以这些情况下的监听器实际上是不可被正常卸载的[^4]。 #### 关于选项参数的情况 现代浏览器还支持传入第四个可选配置项 `{ once, passive }` 或者布尔值形式表示捕获阶段与否。假如最初附加的时候设置了特殊标志位 (比如设置为 true 表明处于捕捉路径而非冒泡),那么同样也要按照原样指定才能正确注销对应的侦听动作[^5]。 ```javascript // 假设我们以捕获模式绑定了 click 事件 button.addEventListener('click', handler, true); // 则也应当采用相同的方式去解绑 button.removeEventListener('click', handler, true); ``` 以上就是关于如何在 JavaScript 中有效管理动态添加和移除事件监听机制的知识点解析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值