Kon*_*ten 5 html events angular
我想使用 tab 键来执行一些逻辑,但实际上并不改变焦点。根据此答案的评论,我可以在标记中使用false或在方法中使用preventDefault()。我两个都是这样的。
onKey(event: KeyboardEvent) {
event.preventDefault();
if(event.key = "Tab") { this.update.emit(this.config); }
}
<input #input
title="{{config|json}}"
value="{{config.value}}"
(keyup)="onKey($event)"
(keydown.Tab)="onKey($event);false;">
Run Code Online (Sandbox Code Playgroud)
尽管如此,当我按下 Tab 键时它会得到额外的跳跃。当我尝试基于其他键(例如“ a ”或“ enter ”)的完全相同的逻辑时,行为符合预期,因此我得出结论,该逻辑是正确的。出于某种原因,按制表符是不守规矩的,并且传播事件就好像我想两次制表符一样。
我是否错误地处理了 Tab 键?除了我已经拥有的之外,不知道谷歌搜索什么。
从 stackblitz 中摘录:https://stackblitz.com/edit/angular-gbuwma ?embed=1&file=src/app/app.component.ts
ts
import { Component, ViewChild, ElementRef,ChangeDetectorRef } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
constructor(private changeDetector: ChangeDetectorRef) { }
@ViewChild("input2") input2: ElementRef;
onKey(event: KeyboardEvent) {
event.preventDefault();
if (event.key === "Tab") {
console.log('ole... tab');
this.input2.nativeElement.value = "aha";
this.changeDetector.detectChanges();
this.input2.nativeElement.focus();
}
}
}
Run Code Online (Sandbox Code Playgroud)
html
<input #input
title=""
value=""
(keydown.Tab)="onKey($event);false;">
- - -
<input #input2
title=""
value=""
(keydown.Tab)="onKey($event);false;">
Run Code Online (Sandbox Code Playgroud)