javascript - 如果回调是参数化箭头函数,如何删除事件侦听器
问题描述
我有一个场景,我想删除事件侦听器。
export const addEventToDropDown = (callback) => {
document.addEventListener("keydown", (event) => {
if (event.key === "Backspace" && document.activeElement.type === "select-one") {
event.target.value = "";
callback(event);
}
}, true);
}
export const removeEventListner = () => {
//document.removeEventListener("keydown");
}
解决方案
您可以动态创建处理程序并将对它的引用存储在闭包中。这样就可以使用removeEventListener取消注册处理程序
const createKeydownHandler = callback => event => {
if (event.key === "Backspace" && document.activeElement.type === "select-one") {
event.target.value = "";
callback(event);
}
};
let keydownHandler;
export const addEventToDropDown = (callback) => {
keydownHandler = createKeydownHandler(callback);
document.addEventListener("keydown", keydownHandler, true);
}
export const removeEventListner = () => {
document.removeEventListener("keydown", keydownHandler)
}
推荐阅读
- javascript - 使用 .includes 检查用户输入(测验问题的答案)是否与我的嵌套数组中的正确答案之一匹配时出现问题
- amazon-web-services - 使用 Lambda 进行集成测试 [最佳实践]
- java - 在第二个 setOnClickListener 代码中使用 address.getLatitude() 访问纬度和经度失败
- django - 无法分配“...”:“TestData.user”必须是“用户”实例
- laravel - Axios GET 使用 Laravel 和 Vue JS 从数据库返回 [0, 0, 5] 而不是 UUID
- javascript - 使用 JavaScript 控制 URL 栏
- javascript - 是否可以使用 JavaScript 设置部分视图模型值?
- c++ - 我无法将此指针跟踪到指针数组程序
- java - 如何解决 IntelliJ 突出显示的未经检查的演员表问题?
- docker - 我对 put /v2/{name}/manifest/{tag} api 感到困惑,至今未能成功调用