按名称获取元素

考虑一下这个函数:

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>

警报框正在显示,但它显示“未定义”。

500429 次浏览

您看到这个错误的原因是因为 document.getElementsByName返回元素的 NodeList。元素的 NodeList不具有 .value属性。

用这个代替:

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

你想要这个:

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


alert (acc);
}
document.getElementsByName("myInput")[0].value;

注意这个方法中的复数形式:

document.getElementsByName()

返回一个元素数组,因此使用[0]来获取第一个匹配项,例如。

document.getElementsByName()[0]

GetElementsByName 返回一个元素数组。

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

这里的所有答案似乎都过时了,请现在使用:

document.querySelector("[name='acc']");
document.querySelector("[name='pass']")

只是为了完整起见,这样其他读者就会对安全网有一个很好的了解,尤其是在没有保证获得所需元素的情况下,你可以测试缺失值,使用 null 合并来设置默认值:

const accElements = document.getElementsByName('acc');
const accElement = accElements[0] ?? null; // Or some other value
if (!accElement) {
// handle the problem
}

当它是连接的对象(而不是返回的数组/节点)时使用 可选链接:

const acc = document.getElementById('acc')?.value ?? null; // Or some other value

另外,尽管 name属性有时是所有可用的属性,但尽可能使用 id,因为它们更有可能是唯一的。假设您想要的元素位于结果索引0([0])中,通常是安全的,但是最好进行检查并确认。对于几行代码(可能还有一些日志记录) ,您可以为最终用户避免出现问题。

如果你有很多输入,你可以试试这个:

<input type="text" name="unitOfAttachService">
<input type="text" name="unitOfAttachService">
<input type="text" name="unitOfAttachService">

此行用于获取标记输入的所有值

let unitOfAttachService =document.getElementsByName("unitOfAttachService");

这就是如何把它从列表中删除并使用

for (let k = 0; k < unitOfAttachService .length; k++) {
unitOfAttachService[k].value;}