Javascript 使用getElementsByName获取多个元素,更改它们的名称会得到奇怪的结果
我有一个表单,其中有多个同名的输入(文本)元素Javascript 使用getElementsByName获取多个元素,更改它们的名称会得到奇怪的结果,javascript,html,getelementsbyname,Javascript,Html,Getelementsbyname,我有一个表单,其中有多个同名的输入(文本)元素 <input name="val[]" type="text" /> <input name="val[]" type="text" /> <input name="val[]" type="text" /> 这很有效 但后来,我想如果我可以这样编码: while( vals=document.getElementsByName("val[]") ) vals[0].name="val2[]"; 这给
<input name="val[]" type="text" />
<input name="val[]" type="text" />
<input name="val[]" type="text" />
这很有效
但后来,我想如果我可以这样编码:
while( vals=document.getElementsByName("val[]") )
vals[0].name="val2[]";
这给了我与上面“无法设置未定义的属性“name”相同的错误”我很困惑。我还用Firefox测试了它,结果是一样的。(无法在IE上测试,因为我在页面上使用HTML5原生DnD) 在我看来,getElementsByName在更改名称时返回的是一个队列,就像从队列中删除项目一样。
这是真的吗?或者对此的正确解释是什么?发生这种情况是因为您更改了属性,您将该属性用作
文档的选择器。getElementsByName
并将节点列表
对象返回给您,而不是数组
<代码>节点列表它是DOM元素()的实时集合。因此,在命名属性修改之后,它将包含少于3个元素()
试着像下面的例子那样修改代码,这将解决您的问题,因为您将得到一个静态的数组
,而不是节点列表
()
var vals=[].slice.call(document.getElementsByName(“val[]);
var valct=vals.length;
对于(var i=0;i发生这种情况是因为您更改了属性,您将该属性用作document.getElementsByName
的选择器,它将节点列表
对象返回给您,而不是数组
节点列表
它是DOM元素的实时集合()。因此,在命名属性修改后,它将包含少于3个元素()
试着像下面的例子那样修改代码,这将解决您的问题,因为您将得到一个静态的数组
,而不是节点列表
()
var vals=[].slice.call(document.getElementsByName(“val[]);
var valct=vals.length;
对于(var i=0;i发生这种情况是因为您更改了属性,您将该属性用作document.getElementsByName
的选择器,它将节点列表
对象返回给您,而不是数组
节点列表
它是DOM元素的实时集合()。因此,在命名属性修改后,它将包含少于3个元素()
试着像下面的例子那样修改代码,这将解决您的问题,因为您将得到一个静态的数组
,而不是节点列表
()
var vals=[].slice.call(document.getElementsByName(“val[]);
var valct=vals.length;
对于(var i=0;i发生这种情况是因为您更改了属性,您将该属性用作document.getElementsByName
的选择器,它将节点列表
对象返回给您,而不是数组
节点列表
它是DOM元素的实时集合()。因此,在命名属性修改后,它将包含少于3个元素()
试着像下面的例子那样修改代码,这将解决您的问题,因为您将得到一个静态的数组
,而不是节点列表
()
var vals=[].slice.call(document.getElementsByName(“val[]);
var valct=vals.length;
因为(var i=0;我明白了。谢谢你的回答:)我明白了。谢谢你的回答:)我明白了。谢谢你的回答:)我明白了。谢谢你的回答:)
vals[ 0 ].name="val2[]";
while( vals=document.getElementsByName("val[]") )
vals[0].name="val2[]";
var vals = [].slice.call(document.getElementsByName("val[]"));
var valct = vals.length;
for( var i=0; i<valct; ++i ) {
vals[i].name="val2[]";
}