1

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

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

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

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 调用之前发生,但它是否以某种方式缓冲?

非常感谢您的任何想法。

编辑

澄清 B.js。此外,字母命名并不意味着加载顺序。

4

1 回答 1

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');
于 2013-05-16T13:42:34.870 回答