Sobre o problema que eventListener não pode ser removido com removeEventListener após ligar isso

Deixe-me falar sobre a conclusão primeiro:

ligação pode especificar isso

Adicione eventos por meio de addEventListener e removeEventListener remove os eventos de escuta, mas a função de escuta

Depois de adicionar o vínculo para especificar isso, ele não pode ser removido normalmente

Motivo: fn.bind(xx) retornará uma nova função, ou seja, fn.bind(aa) === fn.bind(bb) é falso

Solução: Conheça a causa do problema, assim fica fácil resolver

Você pode salvar a função retornada por fn.bind(xx) primeiro

Ao removerEventListener, basta remover esta função salva.

Caso: o evento de clique não é mais acionado após 2 segundos

let obj = {
    
    
    name: "Eric",
    age: 20,
}
let bindHandler = clickHandler.bind(obj)
dom.addEventListener('click', bindHandler)


function clickHandler(evt) {
    
    
    console.log(this)
    // {name: "Eric", age: 20}
}

setTimeout(() => {
    
    
    box.removeEventListener('click', bindHandler)
}, 2000)

おすすめ

転載: blog.csdn.net/mochenangel/article/details/119870240