当字段已由 JavaScript 设置时,CRM 2011 onChange 事件处理程序不会触发

Loz*_*Loz 6 javascript onchange event-handling dynamics-crm-2011

我正在向 CRM 2011 表单添加一些 JavaScript,但我看到了我不明白的行为。(我已经从根本上简化了这个例子来解决问题的核心。)

我有一个名为“new_myfield”的字段,它是单选按钮,我正在触发一个 JavaScript 函数 OnChange 将其设置为 false。如果我使用以下脚本,一切正常,我可以一次又一次地运行脚本,并且每次将字段设置回 false:

var myField = Xrm.Page.getAttribute("new_myfield");
myField.setValue(false);
Run Code Online (Sandbox Code Playgroud)

当然,实际发生的情况是脚本触发了两次,因为当该字段设置为 false 时,这将再次触发脚本,而脚本又将其设置为 false。我已经通过在脚本中放置警报来验证这一点。

但实际上我只想在用户将该字段设置为“true”时运行此脚本,因此我将其更改为:

var myField = Xrm.Page.getAttribute("new_myfield");
if (myField.getValue() == true) {
    myField.setValue(false);
}
Run Code Online (Sandbox Code Playgroud)

该脚本按预期运行一次并将字段设置为“false”,但是下次我手动将单选按钮设置为“true”时,脚本不会运行。它甚至不火。就像 onchange 事件处理程序没有识别出任何事情发生一样。只有当我手动将按钮设置回“false”时,脚本才能按预期再次运行。

就好像脚本需要运行两次(如第一个示例中所示)才能使其工作。

有人知道为什么会这样吗?

dyn*_*CRM 5

使用 setValue 时不触发 Onchange 事件是设计的预期行为,您需要显式调用fireOnChange()

使用 setValue 更新属性不会导致 OnChange 事件处理程序运行。如果您希望 OnChange 事件处理程序运行,除了 setValue 之外,您还必须使用 fireOnChange。 来源