我有一个自定义输入组件,该组件可通过下拉列表扩展文本输入,并根据以前的用户输入提供建议。当我随后选择其他建议,然后通过 按CTRL + Z使用Chrome的撤消功能时,它将在字段中连接前一个字符串而不是替换当前字符串 。
例如,当我首先选择建议“ AAA”,然后将其删除,然后选择“ BBB”并按CTRL + Z,输入中包含字符串“ BBBAAA”。
因此,Chrome似乎未将下拉菜单中的字符串插入注册为对撤消堆栈上DOM的修改。由于上次注册的操作是删除字符串,因此undo函数会将其连接到当前字符串。
在Chrome和Internet Explorer 11中会发生这种情况,在Firefox中我没有任何问题。
我尝试针对自定义指令的给定输入 抑制CTRL + Z撤消功能 :
@HostListener('keydown', ['$event']) onKeyDown(e: KeyboardEvent) {
if (e.ctrlKey && e.keyCode === 90) {
e.preventDefault();
}
}
但是,我仍然可以通过在另一个输入字段中按CTRL + Z来撤消输入的更改,因此必须禁用整个站点的撤消功能。
如何 告诉Chrome将输入更改添加到其撤消堆栈中 ?
这是下拉输入的简单回调函数,当选择了下拉项时,该函数会更新值:
(contact) => {
if (this.formGroup) {
this.formGroup.patchValue(contact);
}
}
用patchValue()
代替setValue()
似乎没有什么区别,调用this.formGroup.markAsTouched();
也没有什么作用。