有一个表格(测试)包含几个问题,必须通过选择从 0 到 5 分来回答。由单选按钮制作:
<input type="radio" name="question_0_1" id="answer_0_1_0" value="0">
<input type="radio" name="question_0_1" id="answer_0_1_1" value="1">
...
<input type="radio" name="question_0_1" id="answer_0_1_5" value="5">
有一个函数可以遍历所有问题,从每个问题中提取答案的值并将其汇总在一个变量中scores:
var temp = 0;
var scores = 0;
function doTest() {
for (i=0; i < test.length; i++) {
temp=document.getElementById('test_form')["question_"+i].value;
if(temp !="") {scores+=parseInt(temp);}
else {/* тут ругань валидатора */}
}
}
电脑上一切正常。在或多或少的现代平板电脑上也是如此。但在较旧的智能手机(android 4.3、Chrome 28 和 android 4.2(用户代理:) 的股票浏览器Lenovo-A880/S100 Linux/3.4.5 Android/4.2 Release/08.07.2013 Browser/AppleWebkit 534.30 Profile/Configuration;)上,它scores加起来了NaN。原始调试temp表明undefined.
有什么技巧?
一般来说,问题是在旧浏览器中,通过这个名称获取一组具有通用名称的单选按钮的值不起作用:
RadioNodeList旧浏览器返回的不是正常的,NodeList而是没有value. 这个案例的 polyfill 解决了这个问题:https ://gist.github.com/Raynos/1647489