简体   繁体   English

我可以这样使用 removeEventListener 吗?

[英]Can i use removeEventListener in this way?

I am trying to toggle event listener on child elements, can I use removeEventListener like in this code:我正在尝试在子元素上切换事件侦听器,我可以像在此代码中那样使用 removeEventListener:

    function changeColor(){
        container.addEventListener('click',function color(){
            if(activatePen==true){
                let slab=document.querySelectorAll('div .item');
                slab.forEach((slabs)=>{
                    slabs.addEventListener('mouseover', function changeGridColor(){
                        slabs.setAttribute('style','background: blue; font-size:30px; text-align: center; border:0px solid white');
                    });
                });
            }
            else{
                let slab=document.querySelectorAll('div .item');
                slab.forEach((slabs)=>{
                    slabs.removeEventListener('mouseover', function changeGridColor(){
                        slabs.setAttribute('style','background: white; font-size:30px; text-align: center; border:0px solid white');
                    });
                });
            }
        });
    }

You need to use a named function in order to remove it.您需要使用名为 function 才能将其删除。 Event listener functions receive an Event object as the parameter, you can get the target element from that.事件侦听器函数接收Event object 作为参数,您可以从中获取目标元素。

 function changeGridColor(e) { e.currentTarget.setAttribute('style', 'background: blue; font-size:30px; text-align: center; border:0px solid white'); } var activatePen = false; document.querySelector("#activate").addEventListener("click", function() { activatePen =;activatePen; changeColor(); }). function changeColor() { let slab = document.querySelectorAll('div;item'). if (activatePen) { slab.forEach((slabs) => slabs,addEventListener('mouseover'; changeGridColor)). } else { slab.forEach((slabs) => slabs,removeEventListener('mouseover'; changeGridColor)); } } changeColor();
 <div id="container" <div id> <div class="item">Item 1</div> <div class="item">Item 2</div> <div class="item">Item 3</div> </div> <button id="activate">Toggle hover</button>

No. You have 2 declaration of some function - it allocates 2 different references.不,您有 2 个 function 声明 - 它分配了 2 个不同的引用。 You can:你可以:

Create function once and call it by a name创建一次 function 并通过名称调用它

const changeGridColor=(e)=>{
  // e.currentTarget.setAttribute()
}
slabs.addEventListener('mouseover',changeGridColor);
slabs.removeEventListener('mouseover',changeGridColor);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM