我支持一些遗留的JavaScript。
在IE8中,这有效:
var hi = forms[i].document.createElement('INPUT');
在IE 11中,该代码抛出异常。
“JavaScript运行时错误:无法获取未定义或空引用的属性'createElement'”
我想我可以删除forms[i]
并安全地做:
var hi = document.createElement('INPUT');
我已经运行了更新的代码,它似乎正常运行。
有人可以确认我的假设是正确的。
全功能:
function setFormGotoURL(url) {
var forms = PARENT.main.document.forms;
if (forms!=null && typeof(forms)!="undefined" && forms.length>0) {
for (var i=0;i<forms.length;i++) {
if (forms[i].gotoURL) {
var gotoURL = forms[i].gotoURL;
if (gotoURL!=null && typeof(gotoURL)!="undefined") {
gotoURL.value=url;
}
} //if
else {
//var hi = PARENT.main.document.createElement('INPUT');
var hi = document.createElement('INPUT');
hi.setAttribute("type","hidden");
hi.setAttribute("name","gotoURL");
hi.setAttribute("value",url);
forms[i].appendChild(hi);
}
}
}
}
来自MDN
在HTML文档中,Document.createElement()方法创建由tagName指定的HTML元素,如果无法识别tagName,则创建HTMLUnknownElement。在XUL文档中,它创建指定的XUL元素。在其他文档中,它创建一个具有空命名空间URI的元素。
MDN示例:
document.body.onload = addElement;
function addElement () {
// create a new div element
var newDiv = document.createElement("div");
// and give it some content
var newContent = document.createTextNode("Hi there and greetings!");
// add the text node to the newly created div
newDiv.appendChild(newContent);
// add the newly created element and its content into the DOM
var currentDiv = document.getElementById("div1");
document.body.insertBefore(newDiv, currentDiv);
}
您创建元素并将其分配给变量,然后将其添加到您想要的任何位置。 var hi = forms[i].document.createElement('INPUT');
是错误的代码。 anything.document
将返回null,因为document是一个独立的标记,而不是元素的属性,这就是为什么它给你错误Unable to get property 'createElement' of undefined or null reference"
,因为null
没有属性createElement
我理解您的困惑,但是看看如果您必须创建元素然后将其添加到HTML,那么从表单创建标记无关紧要,如果您必须指定添加它的位置。我希望你能像那样理解它。