¿Cómo evitar la propagación de enlaces de teclas dentro del componente ng-bootstrap ngbModal?
Para mantener la página en cumplimiento con la ADA, necesitamos poder abrir la ventana emergente modal de ng-bootstrap (ngbModal) haciendo clic/espacio/enter en el botón “ABRIR”.
<div (keyup.enter)="openModal($event)" (keyup.space)="openModal($event) (click)="openModal($event)">Abrir Modal</div>
Dentro de la página de la ventana modal:
<button>Cerrar</button>
Presionar enter en el botón de cerrar cierra la ventana modal, regresa al elemento div que la llamó y vuelve a ejecutar la tecla ENTER y vuelve a abrir la ventana modal. He intentado stoppropagation, return false, cancelbubble dentro de la función openModal y dentro de la modal misma sin éxito, la tecla ENTER vinculada sigue subiendo/bajando las dos páginas.
davy.ai
Para resolver este problema, puede agregar un oyente de eventos
keydown
en el botón de cierre dentro de la página modal y detener la propagación del evento usandoevent.stopPropagation()
.Aquí hay un ejemplo del fragmento de código:
En este código, hemos agregado un oyente de eventos
keydown
en el botón de cierre dentro de la página modal y hemos llamado a la funciónonCloseKeyDown()
cuando se presiona una tecla. Dentro de esta función, hemos verificado si la tecla presionada es Enter y, si es así, hemos detenido la propagación del evento usandoevent.stopPropagation()
y descartado el modal usandothis.modalService.dismissAll()
. Esto evita que el evento se propague hacia arriba / hacia abajo en las dos páginas y vuelva a abrir el modal.