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

ができますか? –

+0

@sv_inはff、opera、safari、chrome、ie6以上の最新バージョンで動作する必要があります。 – Brandon

答えて

4

document.getElementsByName(...)と

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

はDOM要素のコレクションを返します。

これを試しましたか?

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

コードスニペットに基づいて、ちょうど名前を使用する代わりに、代わりにIDを使用することができます。その場合、電話することができます...

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

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

...あなたが望む要素を取得するには...

+0

ああ、非常に良い、それは配列を返すかわからなかった。 idで要素を取得するのは知っていますが、IDで要素を取得するのがパフォーマンスが賢明である場合を除き、必要でない場合はマークアップを邪魔しないようにします(フォームには常にサーバー側の処理に名前が付きます)。 – Brandon

+0

実際には配列ではなく、要素のライブNodeList(または一部のブラウザではHTMLCollection)です。 – duri

+0

@Brandon - このサイトをチェックしてください:http://goo.gl/SX5SB。私のマシン(Mac + Chrome)では、getElementByIdは実際にgetElementsByNameよりも3ms遅いです。 FYI。 @ duri - あなたは正しい。配列ではなくCollectionを返します。それを指摘してくれてありがとう。 – DashK

0

要素のコレクションを取得していますが、要素は1つではありません。

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

この要素がうまく動作するには、要素にIDが必要です。例えば

document.getElementByID("phone"); 
0

このメソッドはget * 要素 * ByNameではありません。配列内に複数の要素を返します。あなたが必要なもの

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

されており、むしろ、名前によって、私はIDを使用してお勧めします。

次に、あなたはあなたがチェックしているブラウザdocument.getElementByID("phone").value