Есть форма (тест), содержащая несколько вопросов, на которые надо давать ответы путем выбора от 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 {/* тут ругань валидатора */}
}
}
На компьютере все нормально. На более-менее современном планшете тоже. А вот на смартфонах постарше (андроид 4.3, Chrome 28 и штатный браузер андроида 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
. Полифилл для этого дела решил проблему: https://gist.github.com/Raynos/1647489
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
После всех элементов в html файле располагаю скриптВ объекте page есть объект obj со значением $("
Возник вопрос в коде, а именно не инкрементируется значение this_i