JS如何移除监听?removeEventListener 报错 2 arguments required, but only 1 present.
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
关键点:要移除的监听器必须和添加时是同一个函数引用,不能每次用匿名函数。正确写法: 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); } 说明
不过通常省略第三参数也能正常移除(默认 如果不想存引用,另一种思路直接把按钮替换成新节点,这样所有旧监听器都会随之销毁: 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 编辑过 |
关键字查询
相关文章
正在查询... |