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

133
Views
Cerrar ventana emergente con Esc si hay muchas en la página

He estado buscando en la web, pero no pude encontrar la respuesta a la pregunta, que parece tener una solución trivial.

Tengo tres ventanas emergentes en mi página, que el usuario puede abrir y la funcionalidad para abrirlas y cerrarlas parece habitual:

 const popupPicture = document.querySelector(".popup_pic"); const popupProfile = document.querySelector(".popup_profile"); const popupImage = document.querySelector(".popup_image"); function openPopup(popup) { popup.classList.add("popup_opened"); } function closePopup(popup) { popup.classList.remove("popup_opened"); }

y paso una de las variables emergentes a closePopup oa openPopup como variable. Por ejemplo

 closePopupButton.addEventListener("click", () => closePopup(popupProfile)); closePopupImageButton.addEventListener("click", () => closePopup(popupImage)); closePopupPictureButton.addEventListener("click", () => closePopup(popupPicture));

Lo mismo con la apertura de ventanas emergentes. Ahora necesito cerrar la funcionalidad con el botón Escape. Entiendo que es fácil de lograr si solo hay una ventana emergente con el siguiente código:

 document.addEventListener("keydown", function (evt) { if (evt.key === "Escape") { // and close popup here } });

Pero hay tres ventanas emergentes en mi caso y no sé cuáles debo cerrar. Por supuesto que puedo hacerlo de esta manera fea:

 document.addEventListener("keydown", function (evt) { if (evt.key === "Escape") { closePopup(popupProfile); closePopup(popupImage); closePopup(popupPicture); } });

Y resuelve mi caso, pero me pregunto si hay una solución más elegante, que no requiera llamar a dos funciones que no deberían llamarse.

Espero haber dejado claro mi problema.

¡Muchas gracias por adelantado!

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

0

Simplemente use document.getElementsByClassName() .

Esto devuelve una HTMLCollection de elementos que incluyen la cadena de clase dada, luego solo necesita iterar a través de ella.

Aquí hay un ejemplo: https://jsfiddle.net/whp8xzb2/1/

Los elementos usados en el ejemplo tienen múltiples clases asignadas, similar a su código. Recupera estos elementos usando document.getElementsByClassName("foo") , luego itera a través de los resultados usando un bucle for:

 for (let item of results) { console.log(item) }
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!