Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数字、字母或其他组的关键事件筛选_Javascript_Angular_Keyboard Events_Eventfilter - Fatal编程技术网

Javascript 数字、字母或其他组的关键事件筛选

Javascript 数字、字母或其他组的关键事件筛选,javascript,angular,keyboard-events,eventfilter,Javascript,Angular,Keyboard Events,Eventfilter,Angular4文档显示()如何更轻松地捕捉键盘击键事件-(keyup.enter)=“foo()”或keyup.w或keyup.space等 我需要的是,只有在信件被按下时才触发事件 我能想到的一个方法是: 但我预计这种伪事件已经在Angular中内置。例如,对于字母,如-(keyup.letters)=“foo()”,对于数字,如-(keyup.numbers)=“foo()”。有吗?上述解决方案是否更适合按组过滤键盘击键 非常感谢您的帮助。AFAIK没有angular提供的键控组。但是

Angular4文档显示()如何更轻松地捕捉键盘击键事件-
(keyup.enter)=“foo()”
keyup.w
keyup.space

我需要的是,只有在信件被按下时才触发事件

我能想到的一个方法是:

但我预计这种
伪事件已经在Angular中内置。例如,对于字母,如-
(keyup.letters)=“foo()”
,对于数字,如-
(keyup.numbers)=“foo()”
。有吗?上述解决方案是否更适合按组过滤键盘击键


非常感谢您的帮助。

AFAIK没有angular提供的键控组。但是您可以轻松地创建自定义指令来允许/禁止您自己的密钥集

这里有一个只允许使用字母的列表

仅限-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();
        }
      }
  }
}
import{Directive,ElementRef,HostListener,Input}来自“@angular/core”;
@指示({
选择器:“[onlyLetters]”
})
仅导出类链接器{
构造函数(私有el:ElementRef){}
@仅限Input()选项:布尔值;
@HostListener('keydown',['$event'])onKeyDown(event){
设e=事件;
if(本.onlyleters){
//控制台日志(e);
if([46,8,9,27,13,110,190]).indexOf(e.keyCode)!=-1||
//允许:Ctrl+A
(e.keyCode==65&&e.ctrlKey==true)||
//允许:Ctrl+C
(e.keyCode==67&&e.ctrlKey==true)||
//允许:Ctrl+X
(e.keyCode==88&&e.ctrlKey==true)||
//允许:起始、结束、左、右
(e.keyCode>=35&&e.keyCode
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();
        }
      }
  }
}