【问题标题】:Fire onChange when a changed field has not lost focus, but form was saved当更改的字段没有失去焦点但保存表单时触发 onChange
【发布时间】:2019-07-23 08:48:49
【问题描述】:

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

  1. 一个字段已注册到 onChange 处理程序。
  2. 用户更改此字段,并且:
  3. 用户立即单击保存。也就是说,在单击保存按钮之前,用户既没有按 Enter 键,也没有单击表单上的某个位置来显式释放焦点。

结果是该字段的onChange 处理程序没有被触发。

如何以受支持的方式触发未触发的 onChange 处理程序?

【问题讨论】:

  • 如果是输入字段,可以使用onKeyDown事件。
  • 你可以使用 oninput 吗?也是由粘贴触发的
  • @mplungjan,不,很遗憾,这是在 Dynamics CRM 上做客户端的一种不受支持的方式。
  • 我在搜索 CRM onchange 时发现了这个:community.dynamics.com/crm/b/crmtipsfromadeveloper/archive/2017/…
  • @Arun Vinoth,我实际上发现我错了,onChange 确实触发了

标签: javascript dynamics-crm dynamics-crm-2015


【解决方案1】:

如果存在就调用它:

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>

【讨论】:

【解决方案2】:

很好的收获。这应该通过用户培训来解决。否则我们必须通过捕获和完成onSave 事件的preventDefault 来规避,检查属性的isDirty,然后检查fireOnchange,然后显式保存事件触发器。

正如documentation 所说,必须失去焦点才能触发onChange

OnChange 事件发生在以下情况:
• 表单域中的数据已更改并且焦点丢失。

【讨论】:

  • 但情况并非如此,如果我更新一个字段,onchange 仍然会触发,如果我不聚焦它会再次触发:(
【解决方案3】:

我错了,onChange 确实火了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 2011-11-23
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多