当更改的字段没有失去焦点但表单已保存时触发 onChange
Fire onChange when a changed field has not lost focus, but form was saved
CRM 2015(可能还有其他版本)似乎有如下错误:
- 字段已注册到
onChange
处理程序。
- 用户更改此字段,并且:
- 用户立即点击保存。也就是说,在单击保存按钮之前,用户既没有按下 Enter 键,也没有单击表单上的某处以明确松开焦点。
结果是未触发此字段的 onChange
处理程序。
如何以受支持的方式触发未触发的 onChange
处理程序?
如果存在就调用它:
document.getElementById("field1").onchange=function() { console.log("change handler called") }
document.getElementById("form1").onsubmit=function() {
this.querySelectorAll("input").forEach(function(fld) {
if (fld.onchange) fld.onchange();
})
}
<form id="form1">
<input type="text" id="field1" />
<input type="submit" />
</form>
收获不错。这应该通过用户培训来解决。否则我们必须通过捕获并完成 onSave
事件的 preventDefault
,检查属性的 isDirty
,然后 fireOnchange
然后显式保存事件触发来规避。
正如 documentation 所说,必须失去焦点才能 onChange
触发:
The OnChange event occurs in the following situations:
• Data in a form field has changed and focus is lost.
我错了,onChange
确实火了。
CRM 2015(可能还有其他版本)似乎有如下错误:
- 字段已注册到
onChange
处理程序。 - 用户更改此字段,并且:
- 用户立即点击保存。也就是说,在单击保存按钮之前,用户既没有按下 Enter 键,也没有单击表单上的某处以明确松开焦点。
结果是未触发此字段的 onChange
处理程序。
如何以受支持的方式触发未触发的 onChange
处理程序?
如果存在就调用它:
document.getElementById("field1").onchange=function() { console.log("change handler called") }
document.getElementById("form1").onsubmit=function() {
this.querySelectorAll("input").forEach(function(fld) {
if (fld.onchange) fld.onchange();
})
}
<form id="form1">
<input type="text" id="field1" />
<input type="submit" />
</form>
收获不错。这应该通过用户培训来解决。否则我们必须通过捕获并完成 onSave
事件的 preventDefault
,检查属性的 isDirty
,然后 fireOnchange
然后显式保存事件触发来规避。
正如 documentation 所说,必须失去焦点才能 onChange
触发:
The OnChange event occurs in the following situations:
• Data in a form field has changed and focus is lost.
我错了,onChange
确实火了。