2012-01-13 111 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