我支持一些旧版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
  元件。在其他文档中,它创建一个具有null的元素
  命名空间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,则从表单中创建标签也没关系,如果随后还必须指定将其添加到何处。希望您能这样理解。

关于javascript - 我可以安全地使用document.createElement而不是forms [i] .document.createElement('INPUT')吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47891750/

10-11 05:51