JavaScript使用for循环拼接访问表单元素实现复选框值求和问题
问题根因
你遇到的写法错误核心是对象属性访问规则的问题:
- 用点号访问对象属性时,后面跟的内容会被当做固定的属性名,不会解析为变量,所以
forms[2].i实际是在找名字为i的表单元素,而非你循环变量i对应的数字名元素 - 模板字符串
${i}不能直接跟在点号后使用,只有放在方括号内才会被解析
修改方案
把循环内的点号属性访问改为方括号属性访问即可,修改后的完整JS代码如下:
calculerScore = () => { var resultat = 0; for (let i = 1; i <= 10; i++) { // 方括号内的i会被解析为循环变量,拿到对应name的表单元素 if (window.document.forms[2][i].checked) { resultat += Number(window.document.forms[2][i].value); } } window.document.forms[2].score.value = resultat; }
可选优化建议
如果页面表单数量变化导致forms[2]索引不准,可以直接给表单加id,用id选择器定位更稳定,比如给form加id="gameForm",之后用document.getElementById('gameForm')访问即可,不用依赖表单的索引顺序。
内容的提问来源于stack exchange,提问作者user10255954
相关产品推荐
相关产品推荐

