【问题标题】:JavaScript Fires too fast. Objects not loadedJavaScript 触发太快。未加载的对象
【发布时间】:2016-11-11 09:13:31
【问题描述】:

我在我的一个表单 OnLoad 事件上运行了以下 JavaScript:-

function calcServicePriceTotal() {

  var grid = document.getElementById('ProjectServicesGrid');
  var ids = grid.control.get_allRecordIds();
  var sum = 0.00;
  var cellValue;

  for (i = 0; i < ids.length; i++) {

    var cellValue = grid.control.getCellValue('iss_salesprice', ids[i]);
    var number = Number(cellValue.replace(/[^0-9\.]+/g, ""));
    sum = sum + number;
  }
  Xrm.Page.data.entity.attributes.get("ava_tempgrossvalue").setValue(sum);
}

不幸的是,我收到以下错误:-

“错误:'subGridOnload' 未定义”

我相信脚本在对象有时间加载之前触发了,那么我可以做些什么来减慢函数的速度?一定有办法克服这个问题,但我不是 JavaScript 专家,所以我可以寻求帮助。

提前致谢

【问题讨论】:

  • 你是怎么调用这个函数的?
  • Rajesh,感谢您的编辑。我通过表单 OnLoad 事件的 CRM 表单属性窗口以正常方式调用它。
  • grid.control.get_allRecordIds();中是否有ajax调用?
  • 我只有上面贴的,我怕不知道ajax
  • subGridOnload 不是您代码的一部分。这意味着它在 CRM 脚本中的失败。只需检查是否所有资源都已加载并按正确的顺序

标签: javascript function onload dynamics-crm-2013


【解决方案1】:
function calcServicePriceTotal() {
    if (document.getElementById("Services")) {
        var grid = document.getElementById("Services").control;
        var ids = grid.get_allRecordIds()
        var sum = 0
        for (i = 0; i < ids.length; i++) {
           var cellValue = grid.getCellValue('iss_salesprice', ids[i]);
           var number = Number(cellValue.replace(/\D/g, ''));
           number = number/100;
           sum = sum + number;
       }
       Xrm.Page.data.entity.attributes.get("iss_value").setValue(sum);
    }
    else {
        setTimeout("calcServicePriceTotal();", 500);
    }
}

【讨论】:

  • 您应该使用setTimeout(calcServicePriceTotal, 500) 而不是将函数包含在引号中。它直接调用函数,而不是在字符串上执行eval
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
相关资源
最近更新 更多