我一直收到“无法获取未定义或空引用的属性'长度'”

I keep getting 'unable to get property 'length' of undefined or null reference'

提问人:Carlos Farmer 提问时间:4/23/2016 更新时间:4/25/2016 访问量:811

问:

我正在测试MS CRM中较大代码段的独立部分的功能,我想知道为什么我不断收到这一小段代码的上述错误:

function testThis()
{
    var optionset = document.getElementById("new_makeyear");
    console.log("this is supposed to be something " + optionset.Options.length);
}

“new_makeyear”是一个选项集。log 语句只是为了让我可以通过控制台查看行为。怎么了?

谢谢

JavaScript 未定义参考 Dynamics-CRM-2015

评论

1赞 Nick Zuber 4/23/2016
optionset是一个 DOM 元素;你确定它有属性吗?Options
2赞 Henk van Boeijen 4/23/2016
不支持在 Dynamics CRM Web 窗体上访问 DOM。当您需要访问特定字段时,请查看 和 函数。属于这些字段的 DOM 元素的名称后缀为下划线 + 字符。Xrm.Page.getAttribute()Xrm.Page.getControl()
0赞 Renjith 4/23/2016
您使用 DOM 方法而不是使用 Xrm 对象模型方法的任何特殊原因?

答:

2赞 Polshgiant 4/24/2016 #1

正如 Henk 在他的评论中提到的,你不应该访问 DOM。您应该使用 API 来检查选项集的选项,如下所示:

function testThis() {
    var makeYear = Xrm.Page.getAttribute("new_makeyear");
    if (!makeYear) { return; }
    console.log(makeYear.getOptions().length + " options currently available");
}

评论

0赞 Carlos Farmer 4/25/2016
此解决方案给了我以下错误:“对象不支持属性或方法'getOptions'”
0赞 Polshgiant 4/25/2016
@CarlosFarmer Whoops,Xrm.Page.getControl 应该是 Xrm.Page.getAttribute。我更新了我的答案。
0赞 Alex Kudryashev 4/24/2016 #2

如果您设法访问生成的 DOM(例如通过 onchange 事件),则 optiongroup 可作为if(this.options[this.selectedIndex].parentNode.tagName =='optgroup') var og = this.options[this.selectedIndex].parentNode.label;