无法用JS获取输入框值,如何通过单个ID/name获取多input值?
问题排查与解决方案
嘿,我来帮你理清楚问题所在,你的代码里有几个关键错误导致无法正确获取输入框的值,先给你拆解下:
- HTML ID必须唯一:你给多个输入框甚至提交按钮都用了
id="num",这违反了HTML的基础规范——每个元素的ID在页面里只能出现一次。这就导致document.getElementById('num')永远只能拿到第一个匹配的元素,根本碰不到后面的输入框。 - 函数调用错误:提交按钮的
onclick属性应该写onclick="addition()"(要加括号触发函数执行),而不是onclick="addition",不然点击按钮时函数根本不会运行。 - 提交按钮ID冗余:提交按钮完全没必要用
num这个ID,换成一个独立的标识比如submitBtn会更清晰。
接下来给你两种实用的实现方式,都能批量获取这些输入框的值,满足你“通过单个标识获取”的需求:
方式一:利用name属性获取
你已经给输入框设置了name="name[]",刚好可以用这个name来批量获取所有输入框:
<input type="text" name="name[]"> <input type="text" name="name[]"> <input type="submit" id="submitBtn" onclick="addition()"> <script> function addition() { // 获取所有name为name[]的输入框元素 const inputs = document.getElementsByName('name[]'); // 遍历每个输入框,取出对应的值 for (let i = 0; i < inputs.length; i++) { const val = inputs[i].value; alert(val); } } </script>
方式二:通过类名统一获取
如果不想依赖name属性,也可以给所有目标输入框加同一个类名,比如class="num-input",然后通过类名来获取:
<input type="text" class="num-input"> <input type="text" class="num-input"> <input type="submit" id="submitBtn" onclick="addition()"> <script> function addition() { // 用querySelectorAll获取所有带num-input类的元素,支持forEach遍历 const inputs = document.querySelectorAll('.num-input'); inputs.forEach(input => { alert(input.value); }); // 也可以用getElementsByClassName(返回HTMLCollection,适合传统for循环) // const inputs = document.getElementsByClassName('num-input'); // for (let i = 0; i < inputs.length; i++) { // alert(inputs[i].value); // } } </script>
小提示
- 以后写HTML一定要记住ID唯一的规则,不然会出现很多莫名其妙的DOM操作问题。
querySelectorAll返回的是静态的NodeList,支持forEach;而getElementsByName、getElementsByClassName返回的是动态HTMLCollection,用传统for循环遍历更稳妥。
内容的提问来源于stack exchange,提问作者Ghufran Khalil
相关产品推荐
相关产品推荐

