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

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

我正在向 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”,脚本会按预期再次运行。

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

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

最佳答案

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

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

关于javascript - 当字段已由 JavaScript 设置时,CRM 2011 onChange 事件处理程序未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38242617/

相关文章:

.Net Treeview 事件处理

dynamics-crm-2011 - 微软 CRM 2011 :- How to allow user to delete record in iframe?

javascript - 如何从 Angular JS 中的 HttpResponse 中提取 JSON 数据?

JavaScript 正则表达式检查搜索的字符串前面是否没有任何内容或空格

sharepoint - 在 itemupdating 和 itemupdated 事件之间共享值

c#-4.0 - 如何将类的属性转换为参数?

iframe - 具有 Windows Azure 托管网页 + IFrame + X-Frame-Options 的 Microsoft Dynamics CRM Online

javascript - 谷歌地图无法读取未定义的属性 'maps'

javascript - SimpleHTTPServer 错误 404 - "GET/d3/d3.v3.js HTTP/1.1"404

event-handling - netbeans 中 Jcombobox 上的 Focuslost 事件