我在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);
}
脚本按预期运行一次,并将字段设置为“假”,但是下次我手动将单选按钮设置为“真实”时,脚本不会出现这样的情况。跑。它甚至没有发射。就像onchange事件处理程序还没有识别出任何事情一样。只有在我手动设置按钮时才会这样 回到' false'该脚本按预期再次运行。
好像脚本需要运行两次(如第一个示例中所示)才能使其工作。
有人想知道为什么会这样吗?
答案 0 :(得分:3)
使用setValue时未触发的Onchange事件是设计的预期行为,您需要显式调用fireOnChange()。
使用setValue更新属性不会导致OnChange事件处理程序运行。如果要运行OnChange事件处理程序,除了setValue之外,还必须使用fireOnChange。 Source