2012-01-13 109 views
8

第二警报命令作品的代码按预期(显示元素“到”的值,但第一个警报命令不起作用(它应该做同样的事情),这是为什么?使用document.getElementsByName()不起作用?

<html> 
<head> 
<script type="text/javascript"> 
function getValue() 
  { 
  alert(document.getElementsByName("to").value); 
    alert(document.forms[0].to.value);   
  } 
</script> 
</head> 
<body> 
<form> 
<input name="to" type="hidden" value="hoolah" /> 
<input type="button" onclick="getValue()" value="Get Value!" /> 
<form/> 
</body> 
</html> 

回答

16

getElementsByName返回HTMLCollection您可以访问的第一个项目是这样的值:

document.getElementsByName("to").item(0).value 

或者这样:

document.getElementsByName("to")[0].value 

更多信息:

+0

演示:HTTP ://jsfiddle.net/LrD9q/ – 2012-01-13 04:26:19

3

getElementsByName返回所有给定名称的元素。这意味着可以有多个。

如果你想获得的第一个元素的值:

document.getElementsByName("to")[0].value 
0

这是因为它把元素(S)到一个数组,尝试这个例子来代替:

function getValues(objName) 
{ 
    var arr = new Array(); 
    arr = document.getElementsByName(objName); 

    alert("total objects with name \"textfield\" = \n" + arr.length); 

    for(var i = 0; i < arr.length; i++) 
    { 
     var obj = document.getElementsByName(objName).item(i); 
     alert(obj.id + " = " + obj.value); 
    } 
} 
+2

我没有downvote,但虽然你的答案是接近它不是正确的。首先'.getElementsByName()'返回一个'HTMLCollection',它是类似数组的,但不是实际的数组。其次,你不应该将你的'arr'变量初始化为一个新的数组,因为你立即用'.getElementsByName()'返回的值覆盖它(它不会把结果放到你的数组中,它会放弃你的数组)。第三,为什么你在for循环的每次迭代中再次调用'.getElementsByName()'? – nnnnnn 2012-01-13 04:54:42

+0

如果你只是想遍历它,那么'.length'属性和'[]'数组符号可以让你像数组一样对待它。但是你的答案中的代码使用'.item()'方法,它不是数组方法。而_real_数组有很多其他方法,比如'.sort()','.join()'等。 – nnnnnn 2012-01-13 05:45:53