JavaScriptの名前による要素の取得


127

この関数を考えてみましょう:

function validate()
{
  var acc = document.getElementsByName('acc').value;
  var pass = document.getElementsByName('pass').value;

  alert (acc);
}

そして、このHTMLの部分:

<table border="0" cellpadding="2" cellspacing="0" valign="top">
    <tr>
        <td class="td1">Account</td>
        <td class="td2"><input type="text" name="acc" /></td>
    </tr>
    <tr class="td1">
        <td>Password</td>
        <td class="td2"><input type="password" name="pass" /></td>
    </tr>
</table>
<div><button onClick="validate()" class="cupid-greenx">Login now</button></div>

警告ボックスは表示されていますが、「未定義」と表示されています。


完全に変更できる場合は、2つの入力フィールドにフィールド「id」を追加し、document.getElementById正確に1つの値を返すを使用することをお勧めします。
Odi 2012

4
より良い:var inputs = document.getElementsByTagName('input')、ノードリストを返します。そこから次のように両方の要素を抽出できます:var pass = input.item( 'pass')。あなたは大きなDOMとしている取引、などの場合だけで先端が、この缶の速度は物事getElementByIdそれは...高速ですので、毎回ツリー全体を検索、ノードリストのに対し行いません
エリアスヴァンOotegem

小さなかわいいコードは確かにXD
GuillermoGutiérrez2014年

回答:


246

このエラーが表示される理由document.getElementsByNameは、NodeList要素のa を返すためです。また、NodeList要素のaには.valueプロパティがありません。

代わりにこれを使用してください:

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

30

このメソッドの複数形に注意してください。

document.getElementsByName()

これは要素の配列を返すので、[0]を使用して最初の出現を取得します。たとえば、

document.getElementsByName()[0]

8
それは配列ではなく、NodeListです:-)
Florian Margaine '24

1
@FlorianMargaine-実際にはHTMLCollectionです;)
j08691 2012

1
@ j08691 nope :)しかし、混乱するのは簡単です:p
Florian Margaine 2012

配列の定義とは何ですか?これはどのように違うのですか?NodeListは、いくつかの便利なメソッドを使用してHTMLElementsの配列をラップしたオブジェクトです。とにかく、OPを平易に表現するために、配列と言いました。
オジー

1
配列には、NodeListよりも多くのメソッドがあります。AのNodeListは、次のような配列からいくつかのメソッド/プロパティとるlengthプロパティを、また、欠けている多くのような、メソッドのをmapforEach私たちが使用する必要がある理由を説明している、など:Array.prototype.forEach.call( NodeList, fn )
Florian Margaine、2012

11

あなたはこれを求めている:

function validate() {
    var acc = document.getElementsByName('acc')[0].value;
    var pass = document.getElementsByName('pass')[0].value;

    alert (acc);
}

回答でOPの例を使用していただきありがとうございます。
クリス・ボイド

@KrisBoyd、違いは、によって返された配列から最初の要素を取得していることですgetElementsByName。多分私はそれをもっと明確にすべきだったでしょう-望むなら自由に編集してください。
Elliot Bonneville

私はあなたに補足を与えていました:)より高い答えのどれもOPで同じ形式でそれを形成しません
クリスボイド

6

メソッドdocument.getElementsByNameは要素の配列を返します。たとえば、最初に選択する必要があります。

document.getElementsByName('acc')[0].value

4
それは配列ではなく、NodeListです:-)
Florian Margaine '24

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.