Búsqueda de sitios web

javascript - Enlace múltiple de teclas en el evento (keydown) en angular 6


He utilizado el evento (keydown) en Angular 6 para enlazar entradas de teclado

Entonces, al presionar la tecla 'Tab' y 'Enter', tengo que realizar mi funcionalidad y añadí un event.preventDefault

Pero cuando se presiona Shift + Tab también se está impidiendo el evento

.html

<input type="text" [(ngModel)]="Result1 (keydown)="onKeydownMain($event)"  >

No quiero el evento (keydown.shift.tab) separado..

.ts

public onKeydownMain(event): void {
    if (event.key === "Enter" || event.key === "Tab") {
                event.preventDefault();
                   // My Functionality goes here
    }
}

Pero el problema es que cuando se presiona Shift + Tab, se dispara el evento y la funcionalidad continúa, lo cual no quiero.

¿Cómo puedo ir a esto?

Solo quiero que Shift + Tab realice su funcionalidad predeterminada en esta entrada.

Respuesta #1

Necesitas eliminar el shift en la condición if de esta manera:

public onKeydownMain(event): void {
       if (!event.shiftKey && (event.key === "Enter" || event.key === "Tab")){
                event.preventDefault();
                   // My Functionality goes here
        }
    }

Puedes consultar https://www.w3schools.com/jsref/obj_keyboardevent.asp para KeyboardEvent

Respuesta #2

Intenta evitar el valor del evento de la tecla Shift 16 en tu código. event.which se utiliza para mostrar el valor del evento de la tecla.

alert(event.which);
event.preventDefault();
if (event.keyCode!=16 && (event.keyCode === 13 || event.keyCode === 9 )) {
    alert("Pressed enter");
}

Artículos relacionados