LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

JS如何移除监听?removeEventListener 报错 2 arguments required, but only 1 present.

freeflydom
2026年10月8日 16:42 本文热度 141

:JS如何移除监听?removeEventListener 报错 2 arguments required, but only 1 present.


removeEventListener 需要两个参数:事件类型和要移除的函数引用。你只传了事件类型,所以报错。

关键点:要移除的监听器必须和添加时是同一个函数引用,不能每次用匿名函数。正确写法:

function editbtnBindEvent(api_id){
    var btn = document.getElementById("edit_api_btn");
    // 先移除旧的监听器(用同一个函数引用)
    if (btn._editHandler) {
        btn.removeEventListener("click", btn._editHandler);
    }
    // 定义处理函数并保存引用
    btn._editHandler = function(){
        open_win('/mis/system_setup/webapi_add.asp?id=' + api_id);
    };
    btn.addEventListener("click", btn._editHandler, false);
}

说明

  1. 两个参数:removeEventListener(type, listener) —— 事件类型 + 函数引用。

  2. 函数引用必须一致:匿名函数每次都是新的,无法移除。所以要把 handler 存起来(这里挂在 btn._editHandler 上)。

  3. 可选的第三参数:removeEventListener 也可以传第三个参数(capture),但必须和 add 时一致。你 add 用的是 false,remove 时如果要传也要传 false:

不过通常省略第三参数也能正常移除(默认 false)。

如果不想存引用,另一种思路

直接把按钮替换成新节点,这样所有旧监听器都会随之销毁:

function editbtnBindEvent(api_id){
    var oldBtn = document.getElementById("edit_api_btn");
    var newBtn = oldBtn.cloneNode(true);   // 克隆,不带监听器
    oldBtn.parentNode.replaceChild(newBtn, oldBtn);
    newBtn.addEventListener("click", function(){
        open_win('/mis/system_setup/webapi_add.asp?id=' + api_id);
    }, false);
}

这种方法不用关心旧函数引用,但会丢失原按钮上绑定的其它监听器和部分状态,按需选择。


该文章在 2026/10/8 16:42:10 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-2  粤公网安备44030602007207号