2011-04-30 95 views
2

只是想提醒在電話字段中輸入的值,但它提醒未定義:JavaScript的問題:getElementsByName()不爲我工作

<script type="text/javascript"> 

function foo() { 
    alert(document.getElementsByName("phone").value); 
    return false; 
} 

</script> 

<form action="foo.php" method="post" onsubmit="return foo()"> 
    <label>Name:</label> 
    <input type="text" name="name" /> 
    <label>Phone:</label> 
    <input type="text" name="phone" /> 
    <label>Email:</label> 
    <input type="text" name="email" /> 
    <label>Message:</label> 
    <textarea name="message"></textarea> 
    <input type="submit" value="Submit" name="submit" /> 
</form> 

如何得到它的工作?另外,我讀過getElementsByName在所有主流瀏覽器中都支持,這是真的嗎?

+0

你正在檢查哪個瀏覽器? – 2011-04-30 18:58:17

+0

@sv_in只需要它在ff,opera,safari,chrome和ie6等版本的最新版本中工作。 – Brandon 2011-04-30 18:59:20

回答

4

document.getElementsByName(...)返回DOM元素的集合。

你試過這個嗎?

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

基於代碼片段,而不是僅使用名稱,您可能需要使用ID。在這種情況下,你可以調用...

... HTML ... 
<input type="text" id="phone" /> 

... Javascript ... 
document.getElementById("phone").value 

...檢索你想要的元素。

+0

啊很好,不知道它是在返回一個數組。我知道如何通過id來獲取元素,但是如果沒有必要,我寧願不要阻塞標記(我的表單總是有服務器端處理的名稱),除非通過id獲取元素的性能明顯更好,是嗎? – Brandon 2011-04-30 18:53:21

+0

它實際上不是一個數組,而是一個活動的NodeList(或某些瀏覽器中的HTMLCollection)元素。 – duri 2011-04-30 18:55:45

+0

@Brandon - 查看本網站:http://goo.gl/SX5SB。在我的機器上(Mac + Chrome),getElementById實際上比getElementsByName慢3毫秒。僅供參考。 @杜裏 - 你說得對。它返回一個Collection,而不是一個Array。感謝您指出了這一點。 – DashK 2011-04-30 19:11:42

0

您正在獲取元素的集合,而不是一個元素。

alert(document.getElementsByName("phone")[0].value); 
0

一個元素需要有一個id才能正常工作。例如

<input type="text" id="phone">Phone:</input> 

document.getElementByID("phone"); 
0

不是說方法得到* 元素 * ByName。它返回數組中的多個元素。

你需要的是document.getElementsByName("phone")[0].value

和而不是按名稱,我建議使用的ID。

然後你可以做document.getElementByID("phone").value