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

139
Visualizações
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 Respostas
Responde à pergunta

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 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