清除逗号按下的输入不会清除逗号

use*_*282 20 html javascript dom-events

当用户按下逗号(,)时,我正在尝试清除输入.所以我做的是,(keypress)我会检查它keyCode,如果它是逗号,我会通过设置输入值来清除输入input.value = ''.

但问题是,即使它清除了我输入的字母,它也不会清除逗号.我究竟做错了什么?

这是问题的一个小提琴.

脚步:

  1. 输入(keypress).
  2. 类型 keyCode
  3. 观察input.value = ''已清除但输入仍然有(keypress).

HTML:

<input type="text" #elem (keypress)="clearInput($event)">
Run Code Online (Sandbox Code Playgroud)

码:

@ViewChild( 'elem' ) public element;

clearInput( e: KeyboardEvent ) {
 if ( e.keyCode === 44 ) {
    this.element.nativeElement.value = '';
 } else {
   console.log('Not a comma');
 }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Angular 6.

Utk*_*pta 12

添加preventDefault.

添加preventDefault()您的clearInput代码,如下所示:

clearInput (e: KeyboardEvent) {
   if (e.keyCode === 44) {
      e.preventDefault();     // <-- Here
      this.element.nativeElement.value = '';
   } else {
      console.log('Not a comma');
   }
}
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多关于preventDefault的 信息.

  • 您可以添加一些解释:逗号的插入将由与您的代码相同的"keyup"事件触发.但是浏览器必须首先运行你的代码,因为你的监听器不是被动的(它可能是preventDefault()或者返回false) - 所以keypress事件将首先运行你的监听器(清除字段)然后是默认监听器(插入一个逗号)进入空场).因此,其他解决方案将是**keyUp**或标记您的听众**被动**. - 但是对于你的情况,preventDefault()是最惯用的. (6认同)

Luc*_*bel 7

只需return false按下逗号:

class HomeComponent {
  @ViewChild('elem') public element;
  clearInput(e: KeyboardEvent) {
    if (e.keyCode === 44) {
      this.element.nativeElement.value = '';
      return false;
    } else {
      console.log('Not a comma');
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

JSFiddle:https://jsfiddle.net/lucakiebel/zrehcwfy/1/