打字稿 3 Angular 7 StopPropagation 和 PreventDefault 不工作
Typescript 3 Angular 7 StopPropagation and PreventDefault not working
我在 div 中输入了一个文本。单击输入应将其设置为焦点并停止 div 单击事件的冒泡。我在文本输入事件上尝试了 stopPropagation
和 preventDefault
但无济于事。控制台日志显示 div 单击仍然执行。如何停止执行 div 点击事件?
// html
<div (click)="divClick()" >
<mat-card mat-ripple>
<mat-card-header>
<mat-card-title>
<div style="width: 100px">
<input #inputBox matInput (mousedown)="fireEvent($event)" max-width="12" />
</div>
</mat-card-title>
</mat-card-header>
</mat-card>
</div>
// component
@ViewChild('inputBox') inputBox: ElementRef;
divClick() {
console.log('click inside div');
}
fireEvent(e) {
this.inputBox.nativeElement.focus();
e.stopPropagation();
e.preventDefault();
console.log('click inside input');
return false;
}
您只能停止同一事件的传播。
您的 fireEvent
函数停止传播您的 mousedown
事件,但不会停止您的 click
事件。
如果您想停止对点击的传播,请尝试在输入上添加另一个点击事件并从那里停止传播
例如
<input #inputBox matInput (click)="$event.stopPropagation()" max-width="12" />
你的其他函数只需要知道需要什么,也就是设置焦点
fireEvent(e) {
this.inputBox.nativeElement.focus();
console.log('click inside input');
}
preventDefault()
防止默认行为,它与冒泡与事件无关,因此您可以放心地忽略它
您有两个不同的事件,一个是 mousedown
,另一个是 click
。
e.stopPropagation() 仅在两个事件属于同一类型时才有效。
您可以像这样更改输入以按预期工作:
<input #inputBox matInput (click)="fireEvent($event)" max-width="12" />
实例:
https://stackblitz.com/edit/angular-material-basic-stack-55598740?file=app/input-overview-example.ts
试试 (click)="$event.stopPropagation()"
。它可能会有所帮助,因为它在我的场景中对我有用。
我在 div 中输入了一个文本。单击输入应将其设置为焦点并停止 div 单击事件的冒泡。我在文本输入事件上尝试了 stopPropagation
和 preventDefault
但无济于事。控制台日志显示 div 单击仍然执行。如何停止执行 div 点击事件?
// html
<div (click)="divClick()" >
<mat-card mat-ripple>
<mat-card-header>
<mat-card-title>
<div style="width: 100px">
<input #inputBox matInput (mousedown)="fireEvent($event)" max-width="12" />
</div>
</mat-card-title>
</mat-card-header>
</mat-card>
</div>
// component
@ViewChild('inputBox') inputBox: ElementRef;
divClick() {
console.log('click inside div');
}
fireEvent(e) {
this.inputBox.nativeElement.focus();
e.stopPropagation();
e.preventDefault();
console.log('click inside input');
return false;
}
您只能停止同一事件的传播。
您的 fireEvent
函数停止传播您的 mousedown
事件,但不会停止您的 click
事件。
如果您想停止对点击的传播,请尝试在输入上添加另一个点击事件并从那里停止传播
例如
<input #inputBox matInput (click)="$event.stopPropagation()" max-width="12" />
你的其他函数只需要知道需要什么,也就是设置焦点
fireEvent(e) {
this.inputBox.nativeElement.focus();
console.log('click inside input');
}
preventDefault()
防止默认行为,它与冒泡与事件无关,因此您可以放心地忽略它
您有两个不同的事件,一个是 mousedown
,另一个是 click
。
e.stopPropagation() 仅在两个事件属于同一类型时才有效。
您可以像这样更改输入以按预期工作:
<input #inputBox matInput (click)="fireEvent($event)" max-width="12" />
实例: https://stackblitz.com/edit/angular-material-basic-stack-55598740?file=app/input-overview-example.ts
试试 (click)="$event.stopPropagation()"
。它可能会有所帮助,因为它在我的场景中对我有用。