我正在开发一个旧项目进行维护。我发现document.all
在Firefox 25中无效。我收到以下错误。
TypeError: document.all.TabularDataControlAttivitta.object is undefined
我的示例代码是:
document.all.TabularDataControlProj.object.Filter = 'COMPANYCODE=' + compValue;
document.all.TabularDataControlProj.object.Reset();
document.getElementById('cmbActivity_' + rowNo).options.length = 1;
if (document.getElementById('cmbProject_' + rowNo).options.length > 0) {
for (var i = document.getElementById('cmbProject_' + rowNo).options.length - 1; i >= 0; i--) {
document.getElementById('cmbProject_'+rowNo).options[i] = null;
}
}
if (document.all.TabularDataControlProj.recordset.recordcount > 0) {
document.all.TabularDataControlProj.recordset.movefirst;
}
pOption = new Option('-Select-', -1);
document.getElementById('cmbProject_' + rowNo).add(pOption);
while (document.all.TabularDataControlProj.recordset.eof == false) {
Optionp = new Option((document.all.TabularDataControlProj.recordset.fields(0) + ' - ' + document.all.TabularDataControlProj.recordset.fields(2)), document.all.TabularDataControlProj.recordset.fields(0));
document.getElementById('cmbProject_' + rowNo).add(Optionp);
document.getElementById('cmbProject_' + rowNo).selectedIndex = indxAct;
document.all.TabularDataControlProj.recordset.movenext;
}
}
任何补丁或解决方案?因为编辑整个项目非常困难。
答案 0 :(得分:3)
document.all
是非标准的。这是他们添加到IE的Microsoft特有的功能。大多数其他浏览器从未支持过它。
即使在IE中,它现在也已被弃用。你不应该使用它。
(你的旧项目必须非常陈旧,因为现在已经有很长一段时间了)
对于大多数情况,您可以使用document.getElementById()
代替。
如果您使用document.all
来获取使用其ID值的元素,则document.getElementById()
是直接替换。
如果您正在使用document.all
以其他方式获取元素,那么我建议切换为通过ID获取(必要时添加ID)。
我注意到你使用该元素的方式使它看起来像是一个activeX控件? (即我看到.object.Filter
,.recordset.movefirst
等内容
如果是这种情况,那么您需要注意Firefox根本不支持activeX控件。它们也是IE特有的。如果它是一个activeX控件,你需要它在Firefox中工作,那么不幸的是,你可能会在你面前进行大量的重写。
答案 1 :(得分:1)
Document.all
提供对具有id的所有元素的访问。这是一个传统的非标准界面,您应该使用document.getElementById()
方法。
答案 2 :(得分:1)
正如错误所述,问题不在于document.all
无效(确实如此),而document.all.TabularDataControlAttivitta.object
未定义。这可能是因为特定于应用程序的原因(您只是没有定义object
expando),或者因为您有几个名称或id等于TabularDataControlAttivitta的元素。