为什么document.getElementsByName(“name”)没有返回任何值?

时间:2014-02-13 16:46:43

标签: javascript internet-explorer-8

我正在创建一个html元素并以编程方式分配id和name值,稍后当我尝试按名称访问这些元素时,它不会返回任何值 例如,我创建一个html输入元素并指定id =“Number_1”和name =“Name_1”

document.getElementsByName("Name_1").length is always 0 

以下代码的作用并返回正确的值

document.getElementById("Number_1" ).name = "Name_1" 

为什么会这样?

var count = 0;
    for(var i =0;i<SomeValue;i++){
       count++;
       var cell = row.insertCell(i);
       cell.className = "lineItemTable";
       var inputElement = document.createElement("input");
       inputElement.type = "text";
       inputElement.id =  "Number_"+count;
       inputElement.name="Name_"+count;
       cell.appendChild(inputElement);
    }

1 个答案:

答案 0 :(得分:1)

在Internet Explorer中,创建元素后无法添加“名称”:

var inputElement = document.createElement("<input name='Name_" + count + "'>");

您必须像这样创建它,在“html”中提供名称作为属性。


编辑 - 确定这很丰富。

在某些时候,微软在他们的“Compat Cookbook”中发布了this note。关键点:

  

从Windows Internet Explorer 9开始,当您使用尖括号(&lt;&gt;)时,createElement会触发“找不到对象”异常。

该注释包含指向documentation for the createElement method的链接,仍然坚持只能使用“eTag”文本设置“NAME”属性,如上例所示。

因此看起来你需要做的是这样的事情:

function makeInput( name ) {
  try {
    return document.createElement("<input name='" + name + "'>");
  }
  catch (x) {
    var inp = document.createElement("input");
    inp.name = name;
    return inp;
  }
}