输入值转换器覆盖 change.trigger 事件
inputs value converter overriding change.trigger event
我有一个输入字段,它接受 10 个连续数字,并在输入最后一个数字后将数字格式化为 xxx-xxx-xxxx 格式的 phone 数字。 IT 还允许用户以上述格式输入号码以及 10 位数字序列。
我还有一个弹出窗口,一旦用户更改值就会出现(在这种情况下,如果用户 tabs/clicks 离开该字段时值与以前不同)。因为我添加了值转换器,所以每当数字格式化为第 10 位时,更改事件就不再触发。奇怪的是,如果用户以最终将采用的格式键入数字,事件将按预期触发。
phone-format.js
export class PhoneNumberValueConverter {
toView(value) {
return value.replace(/(\d{3})(\d{3})(\d{4})/, '--');
}
}
输入字段
<input id="phNumber" value.bind="phone | phoneFormat" change.trigger="showModal();"></input>
showModal();
showModal() {
if(this.hasChanged && this.yesRadio){
$('#updateModal').modal();
}
}
值转换器是否触发了一个优先于我自己的更改事件?
根据 MDN,change
事件应该在输入元素的值更改后失去焦点时触发。
当输入第 10 位数字时,您的值转换器会格式化该值,导致绑定系统将格式化值应用于输入。因为在输入失去焦点之前发生的最后一件事是以编程方式设置值(与通过用户输入相比),所以不满足 change
事件触发的条件。
请尝试使用 blur
事件,因为您的更改处理程序已经在检查值是否已更改。
我有一个输入字段,它接受 10 个连续数字,并在输入最后一个数字后将数字格式化为 xxx-xxx-xxxx 格式的 phone 数字。 IT 还允许用户以上述格式输入号码以及 10 位数字序列。
我还有一个弹出窗口,一旦用户更改值就会出现(在这种情况下,如果用户 tabs/clicks 离开该字段时值与以前不同)。因为我添加了值转换器,所以每当数字格式化为第 10 位时,更改事件就不再触发。奇怪的是,如果用户以最终将采用的格式键入数字,事件将按预期触发。
phone-format.js
export class PhoneNumberValueConverter {
toView(value) {
return value.replace(/(\d{3})(\d{3})(\d{4})/, '--');
}
}
输入字段
<input id="phNumber" value.bind="phone | phoneFormat" change.trigger="showModal();"></input>
showModal();
showModal() {
if(this.hasChanged && this.yesRadio){
$('#updateModal').modal();
}
}
值转换器是否触发了一个优先于我自己的更改事件?
根据 MDN,change
事件应该在输入元素的值更改后失去焦点时触发。
当输入第 10 位数字时,您的值转换器会格式化该值,导致绑定系统将格式化值应用于输入。因为在输入失去焦点之前发生的最后一件事是以编程方式设置值(与通过用户输入相比),所以不满足 change
事件触发的条件。
请尝试使用 blur
事件,因为您的更改处理程序已经在检查值是否已更改。