2011-04-30 96 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