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

151
Views
Evento activado varias veces con window.addEventListener en Vue

Tengo este código html dentro de mi componente Vue

 <div id="stats" class="" @click="clickOutside()"> <ArticleStats :article="article" class="tw-mt-5 tw-hidden md:tw-flex" /> <div @click="$router.push('/article/' + article.content_content_id)" class=" tw-mt-5 tw-block tw-text-center tw-text-sm md:tw-text-base tw-cursor-pointer tw-text-white tw-p-2 tw-rounded-2xl tw-w-full tw-bg-red-400 hover:tw-bg-red-600 hover:tw-text-white " > Leer más </div> </div>

Y ese método clickOutside() es este:

 clickOutside() { console.log('hola') window.addEventListener("mouseup", (e) => { console.log(e); const clickedE1 = e.target; if (this.$el.contains(clickedE1)) { console.log("inside"); } else { console.log("outside"); } }); },

Pero cuando hago clic en ese div, el evento se dispara varias veces, esta es la respuesta en la consola con un solo clic:

ingrese la descripción de la imagen aquí

¿Alguien puede saber cómo solucionarlo o por qué sucede esto?

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

0

Esto es activado por el elemento y sus elementos secundarios, por lo que debe agregar el modificador self para evitar ese comportamiento:

 <div id="stats" class="" @click.self="clickOutside()">

Para obtener más detalles, consulte este https://vuejs.org/guide/essentials/event-handling.html#event-modifiers

about 4 years ago · Juan Pablo Isaza Report

0

Lo que finalmente hice fue crear un detector de eventos en el enlace creado, eliminarlo en el enlace destruido y agregar un método que detecte el objetivo, de esta manera:

 created() { window.addEventListener("mouseup", this.onMouseUp); }, destroyed() { window.removeEventListener("mouseup", this.onMouseUp); }, methods: { onMouseUp(e) { const clickedE1 = e.target; if (this.$el.contains(clickedE1)) { console.log("inside"); } else { console.log("outside"); } }, },

Y eso fue todo, finalmente funcionó como yo quería. Gracias por sus respuestas.

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!