陷入了真正的困境。我有一个init函数,其中有许多参数相互依赖,不能在外部删除,一个元素数组并添加到每个click事件监听器。此事件侦听器检查单击的元素是否是某个元素,然后从数组中的所有元素中删除单击侦听器。由于init函数的内部参数,我必须在事件监听器中使用anonimus函数,但是为了删除事件监听器,我必须在removeEventListener中传递相同的函数,因此它必须被命名为function而我无法获取解决方案。
近似逻辑:
let init = () =>{
//some internal parameters here and logic
for (let i = 0; i < elArr.length; i++) {
elArr[i].addEventListener('click', event => {
if (event.target.style.background ===
elArr[pickedElement].style.background) {
//Not working (can't define the param as a separate function due
//to params of this function can't be passed to there)
for (let i = 0; i < elArr.length; i++)
elArr[i].removeEventListener("click", event);
} else {
event.target.style.background = bgColor;
}
});
}
答案 0 :(得分:2)
除非我遗漏了某些内容,否则看起来你可以在init函数的中声明命名函数,因此它仍然可以访问所有内部变量等。
let init = () => {
//some internal parameters here and logic
let bgCheckListener = event => {
if (
event.target.style.background ===
elArr[pickedElement].style.background
) {
elArr.forEach(el => {
el.removeEventListener("click", bgCheckListener)
})
} else {
event.target.style.background = bgColor
}
}
elArr.forEach(el => {
el.addEventListener("click", bgCheckListener)
})
}
答案 1 :(得分:1)
[Removed original answer as jquery is not applicable]
您可以简单地替换事件
而不是删除事件侦听器而不是使用
替换元素上的事件侦听器elArr[i].onClick = function() { };