代码之家  ›  专栏  ›  技术社区  ›  localhost

添加后如何删除事件侦听器

  •  0
  • localhost  · 技术社区  · 4 年前

    在添加事件监听器后,我试图从按钮中删除事件监听器,最像是重写之前的代码,但它不起作用,我试图控制台日志,但它给出了 undefined ,不知道为什么。我做错了什么/错过了什么?

    应用程序。js

    
    
    document.querySelector("button").addEventListener("click", function(){
        document.querySelector(".dialog").style.display = "block"
        setTimeout(()=>{
            document.querySelector(".dialog").style.display = "none"
        }, 2500)
    })
    document.querySelector("button").removeEventListener("click", sayHi);
    function sayHi(){
        console.log('hello')
    }
    

    指数html

        <div class="container">
            Lorem, ipsum dolor sit amet consectetur adipisicing elit. Voluptate in illo omnis vitae molestias natus eaque necessitatibus molestiae nesciunt illum!
            <button>find out more</button>
        </div>
    
        <div class="dialog" style="display: none;">
            <div class="context">
                <h1>Hi!</h1>
            </div>
        </div>
    

    应用程序。css

    .container{
        width:500px;
        height: auto;
        margin:0 auto;
    }
    button{
        margin:20px auto;
        display: flex;
        justify-content: center;
        cursor: pointer;
    }
    .dialog{
        width: 100%;
        height: 100%;
        background: black;
        opacity: 0.8;
        position: absolute;
        top:0;
        left:0;
        display: flex;
        justify-content: center;
    }
    .context{
        width: 400px;
        height: 400px;
        background: white;
        margin: auto;
        display: flex;
        justify-content: center;
        align-items: center;
    }
    
    2 回复  |  直到 4 年前
        1
  •  1
  •   Taghi Khavari    4 年前

    必须保持对要删除的函数的引用,如下所示:

    function popup(){
        document.querySelector(".dialog").style.display = "block"
        setTimeout(()=>{
            document.querySelector(".dialog").style.display = "none"
        }, 2500)
    }
    document.querySelector("button").addEventListener("click", popup)
    document.querySelector("button").removeEventListener("click", popup);
    

    原因是 removeEventListener 需要确切地知道要从 target element 事件,因为可以向同一个事件添加许多函数,如果要删除一个函数,必须说明是哪一个

        2
  •  0
  •   Nisha Dave    4 年前

    您需要指定一个命名函数,而不是匿名函数。你还需要触发 removeEventListener 在某种程度上

    固定代码

    const showDialog = ()=>{
            document.querySelector(".dialog").style.display = "block"
            setTimeout(()=>{
                document.querySelector(".dialog").style.display = "none"
            }, 2500)
        }
    
    document.querySelector("button").addEventListener("click", showDialog)
    
    
    //code required to remove event listener
    //document.querySelector("button").removeEventListener("click", showDialog);
    document.querySelector("#remove_button").addEventListener("click", ()=>{
    document.querySelector("button").removeEventListener("click", showDialog);
    })
    

    我已经创建了一个基本的代码笔供你使用 https://codepen.io/jaydave1412/pen/vYWVmLo