【发布时间】:2019-09-19 13:00:34
【问题描述】:
我有一个要求,我们希望用户解决输入字段错误,在此之前,不允许用户在屏幕上进行任何其他操作。
同样,我在输入字段和 onBlur 上实现了 HostListener,如果验证场景失败,我会将焦点设置回输入字段。
而且,我正在执行 e.preventDefault() 和 e.stopPropagtion() 以停止在页面上执行的所有其他事件回调(在设置 focus 后,blur 将是第一个事件执行)。
但不知何故,在任何外部事件上,blur 确实会被执行,但它并不限制其他事件的执行。这些也正在执行,否则我将无法实现所需的功能。
import { Directive, HostListener, Input } from '@angular/core';
@Directive({
selector: '[appNumberFormat]'
})
export class NumberFormatDirective {
constructor() { }
@HostListener('blur', ['$event']) blur(evt) {
evt.preventDefault();
console.log('field focus...');
evt.target.focus();
return false;
// if (evt.target.value.trim() === '') {
// this.formControl.control.setValue(this.defaultValue);
// }
}
}
我在 stackBlitz 中复制了相同的场景。请看一下。
【问题讨论】:
-
@Liam 他实际上在 stackblitz 中提供了代码,我只是将其添加到问题中以避免关闭。
-
请问您为什么不使用(模糊)事件绑定?是否要求它必须是指令?
标签: javascript angular onblur onfocus