【问题标题】:CRM 2011 onChange event handler not firing when field has been set by JavaScript当 JavaScript 设置字段时,CRM 2011 onChange 事件处理程序未触发
【发布时间】:2016-11-09 14:29:15
【问题描述】:

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

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

var myField = Xrm.Page.getAttribute("new_myfield");
myField.setValue(false);

当然,实际发生的是脚本触发了两次,因为当该字段设置为 false 时,它​​会再次触发 脚本,它再次将其设置为 false。我已通过在脚本中添加警报来验证这一点。

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

var myField = Xrm.Page.getAttribute("new_myfield");
if (myField.getValue() == true) {
    myField.setValue(false);
}

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

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

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

【问题讨论】:

  • 您是否尝试过在if 之前添加alert 语句?也许代码正在触发,只是您的条件没有评估为true

标签: javascript event-handling dynamics-crm-2011 onchange


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 2012-04-15
    • 2011-09-07
    • 1970-01-01
    相关资源
    最近更新 更多