我正在向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。源