Есть форма (тест), содержащая несколько вопросов, на которые надо давать ответы путем выбора от 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
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости