JavaScript按名称获取元素

Jul*_*eto 120 html javascript dom

考虑这个功能:

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

  alert (acc);
}
Run Code Online (Sandbox Code Playgroud)

这个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>
Run Code Online (Sandbox Code Playgroud)

警告框显示,但显示"未定义".

Aid*_*anc 232

document.getElementsByName返回元素的NodeList,因此它没有属性NodeList.因此你看到了未定义的错误.

你想要的是什么 NodeList


Ozz*_*zzy 26

请注意此方法中的复数:

document.getElementsByName()
Run Code Online (Sandbox Code Playgroud)

返回一个元素数组,因此使用[0]来获得第一个元素,例如

document.getElementsByName()[0]
Run Code Online (Sandbox Code Playgroud)

  • 它不是一个数组,它是一个NodeList :-) (8认同)
  • 数组的定义是什么?它有何不同?NodeList 只是一个用一些方便的方法包裹在 HTMLElement 数组周围的对象。不管怎样,用OP的外行术语来说,我说的是一个数组。 (2认同)
  • 数组比 NodeList 有更多的方法。NodeList 从数组中获取一些方法/属性,例如“length”属性,但它也缺少“很多”方法,例如“map”、“forEach”等。这解释了为什么我们需要使用:“Array” .prototype.forEach.call( NodeList, fn )`。 (2认同)

Ell*_*lle 11

你要这个:

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

    alert (acc);
}
Run Code Online (Sandbox Code Playgroud)


小智 6

方法document.getElementsByName返回元素数组.例如,您应该先选择.

document.getElementsByName('acc')[0].value
Run Code Online (Sandbox Code Playgroud)

  • 它不是一个数组,它是一个NodeList :-) (4认同)

小智 6

这里的所有答案似乎都过时了。请立即使用:

document.querySelector("[name='acc']");
document.querySelector("[name='pass']")
Run Code Online (Sandbox Code Playgroud)


小智 5

document.getElementsByName("myInput")[0].value;
Run Code Online (Sandbox Code Playgroud)