2014-01-02 3 views
0

Я работаю над старым проектом для обслуживания. Я обнаружил, что document.all не работает в Firefox 25. И я получаю ошибку ниже.document.all не работает в Firefox

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

document.all нестандартен. Это была особенность, характерная для Microsoft, которую они добавили в IE. Большинство других браузеров никогда не поддерживали его.

Даже в IE это устарело. Вы не должны его использовать.

(старый проект должен быть очень старым, так как это было в случае в течение довольно продолжительного времени)

Для большинства случаев можно использовать вместо document.getElementById().

Если вы используете document.all, чтобы получить элемент с использованием его идентификационного значения, то document.getElementById() является прямой заменой.

Если вы используете document.all, чтобы получить элемент каким-либо другим способом, я рекомендую переключиться на получение его по ID (при необходимости добавьте идентификатор).

Я отмечаю, что способ использования элемента делает его похожим на элемент управления activeX. (т. е. я вижу такие вещи, как .object.Filter, и т. д.)

Если это так, то вам нужно знать, что Firefox вообще не поддерживает элементы управления ActiveX. Они также специфичны для IE. Если это элемент управления activeX, и вам нужно, чтобы он работал в Firefox, то, к сожалению, вы, вероятно, довольно много переписываете перед собой.

1

Document.all Предоставляет доступ ко всем элементам с идентификатором. Это устаревший нестандартный интерфейс, вы должны использовать метод document.getElementById().

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

+0

Так что это можно использовать, как показано ниже. document.getElementById ("x"). recordset.fields (0) – user1703145

+0

@Krish R, это неверно. 'document.all' извлекает всю коллекцию так же, как' document.getElementsByTagName ([wildcard]) 'делает. И вы должны получить его только один раз, потому что это коллекция узлов Live, и все изменения в дереве документов мгновенно отражаются в ней. И все элементы могут быть доступны либо по их уникальным идентификаторам, либо анонимно по их соответствующему индексу внешнего вида в текущем документе. –

1

Как говорится об ошибках, проблема не с document.all не работает (он делает), то с document.all.TabularDataControlAttivitta.object быть неопределенным. Это может быть связано либо с конкретными приложениями (вы просто не определяете object expando), либо потому, что у вас есть несколько элементов с именем или идентификатором, равным TabularDataControlAttivitta.

Смежные вопросы