Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

178
Views
Javascript useCapture, el controlador de eventos de clic no se activa en el botón con la imagen

Me encuentro con esto mucho, y normalmente lo soluciono con un truco agregando el estilo "eventos de puntero: ninguno" a los elementos secundarios del botón. Sin embargo, de una vez por todas me gustaría entender por qué este código no funciona.

Por ejemplo esta respuesta dice:

Ejemplo <div> <ul> <li></li> </ul> </div> En la estructura anterior, suponga que se produjo un evento de clic en el elemento li.

Al capturar el modelo, el evento será manejado por el div primero (haga clic en los controladores de eventos en el div se activará primero), luego en el ul, luego en el último elemento de destino, li.

Si pruebo el ejemplo citado anteriormente, todo lo que veo es que ocurre el controlador de eventos <li> , no uno para <li> y <div>

Digamos que tengo un botón con una imagen. Si se hace clic en el botón, se ejecuta el controlador de eventos, si se hace clic en la imagen del botón, no se ejecuta el controlador de eventos. De acuerdo, eso es comprensible, excepto que he especificado useCapture = true en el controlador de eventos, por lo que espero que el controlador de eventos comience a capturar en el elemento html raíz y avance hasta el elemento real en el que se hizo clic (que es interrumpido por el preventDefault() continuación)..

 function working(event) { if (event.target.id == "BUTTON") { alert("Its working!") event.preventDefault(); } } document.addEventListener('click', working, true);
 <button id="BUTTON" type="button"> <img src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png"> Works on text but not image</button>

Sigo leyendo sobre burbujeo vs captura, y creo que lo entiendo, pero claramente no lo hago porque el código que escribo no funciona.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Esto se debe a que usa la delegación de eventos, por lo que la captura se realiza en el document . useCapture no tiene sentido aquí.

Una solución es usar el closest en evt.target para recuperar el primer padre con id #BUTTON y actuar en consecuencia.

Ver también

 function working(event) { if (event.target.closest("#BUTTON")) { alert("Its working!"); } } document.addEventListener('click', working);
 <button id="BUTTON" type="button"> <img src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png"> Works on text but not image</button>

Otra solución es agregar el oyente al propio elemento (usando [useCapture = ]true ). En ese caso, la captura comienza en el elemento al que se agrega el detector de eventos.

 function working() { alert("Its working!"); } document.querySelector(`#BUTTON`).addEventListener('click', working, true);
 <button id="BUTTON" type="button"> <img src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png"> Works on text but not image</button>

about 4 years ago · Juan Pablo Isaza Report

0

aquí tienes doble signo de igual

(evento.objetivo.id == "BOTÓN")

solo tiene que haber uno y funciona

(evento.objetivo.id = "BOTÓN")

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!