处理一些遗留代码atm,我对Javascript
和Internet Explorer有一个非常烦人的问题。
GUI的设置包括用document.write()(来自.js文件)打印的几行HTML,还有一些在Javascript函数中工作。
在Javascript函数中,DOM似乎没有被完全加载,因为像this.domInputObj.setAttribute(a,b)
这样的简单语句会在无效元素上调用setAttribute
错误。
//Some where in the beginning we print an input field with document.write
document.write('<input ...');
...
new SomeObject(document.forms[formA].inputFieldA)
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.字母命名也不意味着加载顺序。
答案 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');