gpt4 book ai didi

javascript - 注册多个事件监听器,即使我正在使用 removeEventListener

转载 作者:行者123 更新时间:2023-11-29 16:15:00 27 4
gpt4 key购买 nike

这让我抓狂。我正在注册多个 mouseout 事件,即使我使用 removeEventListener() 摆脱了它们。我已经尝试了各种变体。本质上,一旦 mouseout 事件发生,我想摆脱它,因为用户将在不同的图像上滚动以查看大预览。它工作正常,但注册的多个事件让我感到厌烦。

this.removeEventListener('mouseout', handler, false);

什么也没有。我不确定我在这里做什么。我似乎无法摆脱 mouseout 事件,它们一直在堆积。

document.querySelector('.grid').addEventListener('mouseover',function(e) {
if (e.target.tagName==='IMG') {
var myElement=document.createElement('div');
myElement.className='preview';
e.target.parentNode.appendChild(myElement);

var handler = e.target.addEventListener('mouseout', function (d) {
var myNode = d.target.parentNode.querySelector('div.preview');
console.log(d.target.parentNode);
if (myNode) {
myNode.parentNode.removeChild(myNode);
}
this.removeEventListener('mouseout', handler, false);
});
} //
}, false); // addEventListener

最佳答案

addEventListener 不返回值,因此 handlerundefined 并且对 removeEventListener 的调用将失败。

改用命名函数表达式:

// give the function a name                    vvvvvvv
e.target.addEventListener('mouseout', function handler(d) {
// ...
this.removeEventListener('mouseout', handler, false); // use name
}, false); // <- don't forget `false` here, just in case

函数的名称只能在函数内部访问。

关于javascript - 注册多个事件监听器,即使我正在使用 removeEventListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18047505/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com