单选按钮计数求助:36题表单i/j命名单选框选中数统计失败
解决单选按钮计数失效的问题
我来帮你搞定这个计数问题,你的代码里有几个关键错误导致功能无法实现,下面是修正方案和详细解释:
问题分析
- 表单元素访问方式错误:你尝试用
form.i[count]获取name为i1、i2的单选按钮,但表单元素是通过完整name值访问的,正确方式应该是form['i' + count]——因为每个单选按钮的name是i拼接数字,并非一个名为i的数组。 - 变量重复声明导致计数失效:循环中你写了
var rasa=rasa+1;,这里的var会创建循环内的局部变量,完全脱离了函数开头声明的rasa变量,导致外部计数变量始终为0,必须去掉这个var。 - 缺少触发计算的事件:你的代码没有绑定单选按钮的点击事件,用户选择选项时不会触发计数计算,需要给每个单选按钮添加触发逻辑。
修正后的完整代码
<!DOCTYPE html> <html> <head> <script> function computeForm(form) { var rasa = 0; var rasb = 0; // 统计i开头的单选按钮选中数量 for (var count = 1; count <= 36; count++) { var radio = form['i' + count]; if (radio && radio.checked) { rasa += 1; } } // 统计j开头的单选按钮选中数量 for (var count = 1; count <= 36; count++) { var radio = form['j' + count]; if (radio && radio.checked) { rasb += 1; } } document.getElementById('showa').innerHTML = rasa; document.getElementById('showb').innerHTML = rasb; } </script> </head> <body> <form method="POST"> <!-- 示例:第1题和第36题,中间省略第2-35题 --> Question 1 <input type="radio" name="i1" value="1" onclick="computeForm(this.form)">A1 <input type="radio" name="j1" value="0" onclick="computeForm(this.form)">A2 <br> <br> Question 36 <input type="radio" name="i36" value="1" onclick="computeForm(this.form)">A1 <input type="radio" name="j36" value="0" onclick="computeForm(this.form)">A2 </form> <p>Result a: <span id='showa'>0</span></p> <p>Result b: <span id='showb'>0</span></p> </body> </html>
额外优化说明
- 去掉了多余的
test_it函数,我们只需要判断单选按钮是否选中,不需要用eval处理值。 - 增加了
radio && radio.checked的判断,避免因元素缺失导致报错。 - 给每个单选按钮添加了
onclick="computeForm(this.form)",用户每次选择选项时都会实时更新计数。
内容的提问来源于stack exchange,提问作者Gabriel Gheorghe
相关产品推荐
相关产品推荐

