DOM加载和引用Javascript函数中的元素

时间:2013-05-16 13:25:06

标签: javascript internet-explorer dom

处理一些遗留代码atm,我对Javascript和Internet Explorer有一个非常烦人的问题。

GUI的设置包括用document.write()(来自.js文件)打印的几行HTML,还有一些在Javascript函数中工作。

在Javascript函数中,DOM似乎没有被完全加载,因为像this.domInputObj.setAttribute(a,b)这样的简单语句会在无效元素上调用setAttribute错误。

A.js

//Some where in the beginning we print an input field with document.write
document.write('<input ...');
...
new SomeObject(document.forms[formA].inputFieldA)

B.js

function SomeObject(inputFieldObj) {
    // the text input field
    this.inputObjFieldObj = inputFieldObj;
    this.inputFieldObj.setAttribute('a','b') //e.g. yields error in IE
}

我的问题是如何才能在IE中发生这种情况?我认为这是.js文件的加载顺序(它可能仍然是),而其他浏览器更“智能”?

如果我调试那么document.write发生在Javascript调用之前,但它是否以某种方式缓冲?

非常感谢任何想法。

修改

Clarified B.js.字母命名也不意味着加载顺序。

1 个答案:

答案 0 :(得分:1)

根据我的经验,当您尝试动态创建元素时,这通常发生在IE 6/7中。使用document.write('<input ...')语句,然后使用setAttribute操作/设置它,而不是仅仅操作对象。较旧版本的IE不会更新DOM和其他内部属性,以识别已添加这些动态元素,因此错误。

我会尝试这样做,作为一个例子:

var input = document.createElement('input');

// Add a CSS class to it
input.className = "yourClass";

// Add a CSS rule to it
input.style.color = "#FF0000";

而不是

document.write('<input type="text" id="input1" />');
document.getElementById('input1').setAttribute('class','yourClass');
document.getElementById('input1').setAttribute('color','#FF0000');