Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

185
Visualizações
¿Cómo agrego y elimino un detector de eventos usando una función con argumentos y parámetros de eventos?

Por ejemplo, tengo la siguiente función para ejecutar cuando ocurre el evento mouseup .

 const listener = (element: HTMLElement, e: MouseEvent): void => { if (e.target instanceof Element && element && !element.contains(e.target)) { element.style.backgroundColor = 'red'; } }

Luego, estoy tratando de descubrir cómo agregar un element de parámetro adicional al listener y eliminarlo cuando ya no sea necesario.

 function addEventListener (element: HTMLElement) => { window.document.addEventListener('mouseup', (e) => listener(element, e)); } function removeEventListener (element: HTMLElement) => { window.document.removeEventListener('mouseup', ?? ); }

¿Como puedó resolver esté problema?

Intenté usar bind como se muestra a continuación, pero MouseEvent no puede enlazar antes de addEventListener .

 let callback; function addEventListener (element: HTMLElement) => { // how can I bind `MouseEvent`? callback = listener.bind(this, element, ??); window.document.addEventListener('mouseup', callback); } function removeEventListener (element: HTMLElement) => { window.document.removeEventListener('mouseup', callback); }

¿Debo usar el cierre aquí como a continuación?

 function createListener(element: HTMLElement) { return (e: MouseEvent) => { listener(element, e); } } let callback; function addEventListener (element: HTMLElement) { callback = createListener(account); window.document.addEventListener('mouseup', callback); } function removeEventListener (element: HTMLElement) => { window.document.removeEventListener('mouseup', callback); }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

De la misma manera que normalmente elimina un detector de eventos, pero almacena un mapa (diccionario) que asigna un HTMLElement a una función:

 const callbacks = new Map<HTMLElement, (e: MouseEvent) => void>(); function addEventListener (element: HTMLElement) => { const callback = (e) => listener(element, e); callbacks.set(element, callback); window.document.addEventListener('mouseup', callback); } function removeEventListener (element: HTMLElement) => { const callback = callbacks.get(element); if(callback) { window.document.removeEventListener('mouseup', callback); delete callback; } }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda