问题描述
我正在创建一个form.html页面 并且我试图在form.js文件中使用Javascript获取带有用户应使用 querySelectorAll 输入的5个字段的数组,但是我的代码无法正常工作。
我在做什么错?我想要我的JS代码要做的是找到所有符合以下条件的字段:
- 是输入元素
- 以“ txt”开头
- 是type =“ txt”或type =“ password”
window.addEventListener('DOMContentLoaded',function() {
let divMain = document.getElementById("divMain");
let inputElements = divMain.getElementById("frmRegister").querySelectorAll(input[id ^= txt][type = "text"],input[id ^= txt][type = "password"]);
console.log(inputElements.length);
});
<h2 class="container">Form/jQuery</h2>
<div class="container" id="divMain">
<form action="form.html" method="get" name="frmRegister" id="frmRegister">
<table>
<tr>
<td>Login</td>
<td><input required type="text" name="field1" id="txtfield1" /> <span id="spnLogin"></span></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" id="txtPassword"> <span id="spnPasswordComplexity"></span></td>
</tr>
<tr>
<td>Confirm Password</td>
<td><input type="password" id="txtConfirmPassword"> <span id="spnPasswordCompare"></span></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" id="txtEmail"> <span id="spnEmail"></span></td>
</tr>
<tr>
<td>Confirm Email</td>
<td><input type="text" id="txtConfirmEmail"> <span id="spnEmailCompare"></span></td>
</tr>
<tr>
<td colspan="2"><input type="submit" id="btnRegister" value="Register"></td>
</tr>
</table>
</form>
</div>
解决方法
您使选择器过于复杂,缺少一些引号
let inputElements = document.getElementById("frmRegister")
.querySelectorAll('input[id^=txt][type="text"],input[id^=txt][type="password"]');
但是使用过滤器会更容易:
window.addEventListener('DOMContentLoaded',function() {
let inputElements = [...document.getElementById("frmRegister").querySelectorAll('input[id ^= txt]')]
.filter(elem => elem.type === "text" || elem.type==="password");
console.log(inputElements);
// or
inputElements.forEach(elem => console.log(elem.id,elem.type));
});
<h2 class="container">Form/jQuery</h2>
<div class="container" id="divMain">
<form action="form.html" method="get" name="frmRegister" id="frmRegister">
<table>
<tr>
<td>Login</td>
<td><input required type="text" name="field1" id="txtfield1" /> <span id="spnLogin"></span></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" id="txtPassword"> <span id="spnPasswordComplexity"></span></td>
</tr>
<tr>
<td>Confirm Password</td>
<td><input type="password" id="txtConfirmPassword"> <span id="spnPasswordCompare"></span></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" id="txtEmail"> <span id="spnEmail"></span></td>
</tr>
<tr>
<td>Confirm Email</td>
<td><input type="text" id="txtConfirmEmail"> <span id="spnEmailCompare"></span></td>
</tr>
<tr>
<td colspan="2"><input type="submit" id="btnRegister" value="Register"></td>
</tr>
</table>
</form>
</div>
,
这是
window.addEventListener('DOMContentLoaded',function() {
let inputElements = document.getElementById("frmRegister").querySelectorAll('input[id^=txt][type="text"],input[id^=txt][type="password"]');
console.log(inputElements)
});
<h2 class="container">Form/jQuery</h2>
<div class="container" id="divMain">
<form action="form.html" method="get" name="frmRegister" id="frmRegister">
<table>
<tr>
<td>Login</td>
<td><input required type="text" name="field1" id="txtfield1" /> <span id="spnLogin"></span></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" id="txtPassword"> <span id="spnPasswordComplexity"></span></td>
</tr>
<tr>
<td>Confirm Password</td>
<td><input type="password" id="txtConfirmPassword"> <span id="spnPasswordCompare"></span></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" id="txtEmail"> <span id="spnEmail"></span></td>
</tr>
<tr>
<td>Confirm Email</td>
<td><input type="text" id="txtConfirmEmail"> <span id="spnEmailCompare"></span></td>
</tr>
<tr>
<td colspan="2"><input type="submit" id="btnRegister" value="Register"></td>
</tr>
</table>
</form>
</div>
所有输入
window.addEventListener('DOMContentLoaded',input[id^=txt][type="password"]');
console.log(inputElements.length)
});
<h2 class="container">Form/jQuery</h2>
<div class="container" id="divMain">
<form action="form.html" method="get" name="frmRegister" id="frmRegister">
<table>
<tr>
<td>Login</td>
<td><input required type="text" name="field1" id="txtfield1" /> <span id="spnLogin"></span></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" id="txtPassword"> <span id="spnPasswordComplexity"></span></td>
</tr>
<tr>
<td>Confirm Password</td>
<td><input type="password" id="txtConfirmPassword"> <span id="spnPasswordCompare"></span></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" id="txtEmail"> <span id="spnEmail"></span></td>
</tr>
<tr>
<td>Confirm Email</td>
<td><input type="text" id="txtConfirmEmail"> <span id="spnEmailCompare"></span></td>
</tr>
<tr>
<td colspan="2"><input type="submit" id="btnRegister" value="Register"></td>
</tr>
</table>
</form>
</div>
,
getElementById是文档对象的一部分,而不是元素对象。
您的代码稍有改动。
(function() {
let divMain = document.getElementById("divMain");
let inputElements = divMain.querySelector("#frmRegister").querySelectorAll('input[id^="txt"][type="text"],input[id^="txt"][type="password"]');
console.log(inputElements);
})();
<div class="container" id="divMain">
<form action="form.html" method="get" name="frmRegister" id="frmRegister">
<table>
<tr>
<td>Login</td>
<td><input required type="text" name="field1" id="txtfield1" /> <span id="spnLogin"></span></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" id="txtPassword"> <span id="spnPasswordComplexity"></span></td>
</tr>
<tr>
<td>Confirm Password</td>
<td><input type="password" id="txtConfirmPassword"> <span id="spnPasswordCompare"></span></td>
</tr>
<tr>
<td>Email</td>
<td><input type="text" id="txtEmail"> <span id="spnEmail"></span></td>
</tr>
<tr>
<td>Confirm Email</td>
<td><input type="text" id="txtConfirmEmail"> <span id="spnEmailCompare"></span></td>
</tr>
<tr>
<td colspan="2"><input type="submit" id="btnRegister" value="Register"></td>
</tr>
</table>
</form>
</div>