当更改的字段没有失去焦点但表单已保存时触发 onChange

Fire onChange when a changed field has not lost focus, but form was saved

CRM 2015(可能还有其他版本)似乎有如下错误:

  1. 字段已注册到 onChange 处理程序。
  2. 用户更改此字段,并且:
  3. 用户立即点击保存。也就是说,在单击保存按钮之前,用户既没有按下 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确实火了。