Angular4文档显示(Key event filtering (with key.enter))如何更轻松地捕获键盘击键事件-(keyup.enter)="foo()"
或keyup.w
或keyup.space
等。
我需要的是仅在按下字母时才触发事件。
我能想到的一种方法是:<input id="textFilter" (keyup)=“foo($event)”>
foo(e){
var allowedKeys = [‘KeyQ’, ‘KeyW’, ‘KeyE’, and the rest of the alphabet...]
if (allowedKeys.indexOf(e.code) != -1 ) {
return true;
}
}
但是我希望这样的
pseudo-events
已经内置在Angular中。对于前。用于字母,例如-(keyup.letters)="foo()"
和用于数字,例如-(keyup.numbers)="foo()"
。有吗上面的解决方案是否适合按组过滤键盘击键?docs
感谢您的帮助。
最佳答案
AFAIK没有由angular提供的抠像组。但是您可以轻松创建自定义指令来允许/禁止您自己的键集。
这是仅允许字母的demo。
only-letters.directive.ts:
import { Directive, ElementRef, HostListener, Input } from '@angular/core';
@Directive({
selector: '[onlyLetters]'
})
export class OnlyLetters {
constructor(private el: ElementRef) { }
@Input() onlyLetters: boolean;
@HostListener('keydown', ['$event']) onKeyDown(event) {
let e = <KeyboardEvent> event;
if (this.onlyLetters) {
// console.log(e);
if ([46, 8, 9, 27, 13, 110, 190].indexOf(e.keyCode) !== -1 ||
// Allow: Ctrl+A
(e.keyCode == 65 && e.ctrlKey === true) ||
// Allow: Ctrl+C
(e.keyCode == 67 && e.ctrlKey === true) ||
// Allow: Ctrl+X
(e.keyCode == 88 && e.ctrlKey === true) ||
// Allow: home, end, left, right
(e.keyCode >= 35 && e.keyCode <= 39)) {
// let it happen, don't do anything
return;
}
// Ensure that it is a number and stop the keypress
if (((e.keyCode < 65 || e.keyCode > 90)) && (e.keyCode < 96 || e.keyCode > 105)) {
e.preventDefault();
}
}
}
}
关于javascript - 数字,字母或其他组的按键事件过滤,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45116152/