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

262
Views
document.addEventListener en la función no funciona

Estoy tratando de ocultar el cuadro "modal" cuando el usuario presiona la tecla Esc.
  • Entonces, primero verifico dónde el cuadro contiene la clase: 'oculto', que técnicamente oculta el cuadro en la interfaz de usuario.
  • Luego, si no está oculto (el cuadro no contiene clase - 'oculto') y aparece en la pantalla, la función esperará a que se presione la tecla Esc para que el cuadro desaparezca.

Mostrar y ocultar las partes de la caja funciona bien, pero la parte document.addEventListener no funciona.

 const btnopenModal = document.querySelectorAll('.show-modal'); const btnCloseModal = document.querySelector('.close'); const overlay = document.querySelector('.overlay'); const modal =document.querySelector('.modal'); const showModal = function() { modal.classList.remove('hidden'); overlay.classList.remove('hidden'); }; const hideModal = function() { modal.classList.add('hidden'); overlay.classList.add('hidden'); } for(let i = 0; i < btnopenModal.length; i++) btnopenModal[i].addEventListener('click', showModal); btnCloseModal.addEventListener('click', hideModal); overlay.addEventListener('click', hideModal); if(!overlay.classList.contains('hidden')) { document.addEventListener('keypress', function(e) { console.log(e.key); if(e.key === 'Escape') { hideModal(); } }) };

¿Alguna otra forma de que esto funcione?

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

0

Mover si condición en devolución de llamada. Siempre desea agregar un oyente de keypress de tecla, simplemente no ejecute hideModal() si !overlay.classList.contains('hidden')

 const btnopenModal = document.querySelectorAll('.show-modal'); const btnCloseModal = document.querySelector('.close'); const overlay = document.querySelector('.overlay'); const modal =document.querySelector('.modal'); const showModal = function() { modal.classList.remove('hidden'); overlay.classList.remove('hidden'); }; const hideModal = function() { modal.classList.add('hidden'); overlay.classList.add('hidden'); } for(let i = 0; i < btnopenModal.length; i++) btnopenModal[i].addEventListener('click', showModal); btnCloseModal.addEventListener('click', hideModal); overlay.addEventListener('click', hideModal); document.addEventListener('keypress', function(e) { console.log(e.key); if(e.key === 'Escape' && !overlay.classList.contains('hidden')) { hideModal(); } });
about 4 years ago · Juan Pablo Isaza Report

0

Creo que su declaración if se evalúa cuando la página web se ejecuta por primera vez, y supongo que la declaración if se evalúa como falsa, ya que probablemente contiene la clase "oculta" al principio. No entiendo por qué lo pones en el controlador de claves dentro de una declaración if, si es por seguridad, deberías ponerlo dentro de tu función así:

 document.addEventListener('keypress', function(e) { if(!overlay.classList.contains('hidden')) { console.log(e.key); if(e.key === 'Escape') { hideModal(); } }; })
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!