【发布时间】:2018-09-13 13:16:35
【问题描述】:
我有这个指令:
这个指令应该禁止输入type="number"
达到最大长度后(作为输入传递)。
因为 maxlength 属性不适用于 type="number"。
export class AIGMaxLengthDirectiveCO {
constructor(private elm: ElementRef) { }
@Input('aigmaxlengthCO') aigmaxlength: number;
@HostListener('keydown', ['$event'])
handleKeyboardEvent(e: KeyboardEvent) {
if (e.keyCode === 8 || e.keyCode === 9 || e.keyCode === 46) { // Backspace\tab\delete
return true;
} else if (this.isTextSelected(e)) {
return true;
} else if ((e.target as HTMLInputElement).value.length >= this.aigmaxlength) {
e.preventDefault();
return false;
}
}
isTextSelected(e) {
if (document.getSelection().toString() !== '') {
return true;
}
const textbox = e.target as HTMLInputElement;
const startIndex = textbox.selectionStart;
const endIndex = textbox.selectionEnd;
return endIndex - startIndex > 0;
}
}
<input [aigmaxlengthCO]="9" class="aig-input aig-17 input-text padding-0" type="number" formControlName="id" [ngClass]="form.get('id').invalid && (form.get('id').touched|| validations) ? 'error' : ''"/>
在第三个if 块中,您可以看到
return false 和 preventDefault()。
我在 mobile Chrome 上的问题只是不会停止活动, 我可以看到我进入了第三个“if”块,应该返回 false, 但它不起作用。 在桌面上,一切正常
我尝试过的事情:
- 将
keydown更改为keypress。 - 将
keydown更改为document:keydown。
【问题讨论】:
-
@David 感谢您的回复。但我需要角度解决方案,而不是 html 和 js。
标签: javascript angular angularjs-directive