document.all在Firefox中不起作用

时间:2014-01-02 09:58:25

标签: javascript firefox

我正在开发一个旧项目进行维护。我发现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;
    }
}

任何补丁或解决方案?因为编辑整个项目非常困难。

3 个答案:

答案 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()方法。

参考:https://developer.mozilla.org/en/docs/Web/API/Document

答案 2 :(得分:1)

正如错误所述,问题不在于document.all无效(确实如此),而document.all.TabularDataControlAttivitta.object未定义。这可能是因为特定于应用程序的原因(您只是没有定义object expando),或者因为您有几个名称或id等于TabularDataControlAttivitta的元素。