Если подойти к проблеме с другой стороны, при использовании "checkbox", если выбрать все 4 варианта, как сделать, чтобы тест не был засчитан и вернулся "0" ?
Скрипт работает, но не совсем так как надо: <script type="text/javascript"> function calc(){ var chbx = myform['testChbx']; var sum=0; var gc=parent.stat.document.forms.stat.good; for(var i = 0; i < chbx.length; i++){ if(chbx[i].checked && (chbx[i].value == 'v2' || chbx[i].value == 'v4')) { sum++; } else if (sum<=0){ sum=0;} } gc.value = +gc.value+ +(sum>0); } </script> |
Freestyle007,
Цитата:
|
Тут ситуация не однозначная: если 1,2,3 варианты, 4 не выбирать - то возвращает "0"; если 1,3,4 варианты, 2 не выбирать - то возвращает "1". При условии, что правильные ответы: 2 и 4.
Что-то я себе уже ум сломал... |
Цитата:
Например, за отмеченный правильный ответ добавлять к sum 1, за неправильный - вычитать 1. И если sum будет положительная, то вернется 1, иначе 0. И проверять не так if(chbx[i].checked && (chbx[i].value == 'v2' || chbx[i].value == 'v4')) а по массиву правильных ответов. |
Цитата:
|
Несколько упрощенный макет
<input id="gc" disabled> <form name="myform"> <p>Выберите один или несколько вариантов<br> <label> <input type="checkbox" name="testChbx" value="v1"> Вариант 1</label> <br> <label> <input type="checkbox" name="testChbx" value="v2"> Вариант 2</label> <br> <label> <input type="checkbox" name="testChbx" value="v3"> Вариант 3</label> <br> <label> <input type="checkbox" name="testChbx" value="v4"> Вариант 4</label> <br> </p> </form> <div id="soder" onclick="calc(0);">Оценка</div> <script type="text/javascript"> var answers = [["v2","v4"],["v7","v8"],["v10"]]; //Массив правильных ответов по 3 билетам function calc(ticket){ var chbx = myform['testChbx']; var sum=0; for(var i = 0; i < chbx.length; i++){ if(chbx[i].checked) { sum += answers[ticket].indexOf(chbx[i].value) > -1?1:-1; } } gc.value = +gc.value+ +(sum>0); } </script> Пример крутится на одном билете. Номер билета - параметр для функции calc. Массив правильных ответов - просто для иллюстрации, как выглядит. В этом примере правильные и неправильные варианты имеют одинаковые веса с противоположным знаком +-1 Можно сделать, чтобы один неправильный ответ обнулял весь результат по билету. |
Отлично! А как сделать, чтобы при выборе неправильного ответа обнулялся результат?
|
Цитата:
|
Проверил, не работает ни так
sum += answers[ticket].indexOf(chbx[i].value) > -1?1:-10; ни так sum += answers[ticket].indexOf(chbx[i].value) > -1?1:-1; <div id="soder" onclick="calc(0);">Оценка</div> <script type="text/javascript"> var answers = [["v2","v4"]]; //Массив правильных ответов по 3 билетам function calc(ticket){ var chbx = myform['testChbx']; var sum=0; for(var i = 0; i < chbx.length; i++){ if(chbx[i].checked) { sum += answers[ticket].indexOf(chbx[i].value) > -1?1:-1; } } gc.value = +gc.value+ +(sum>0); } </script> Не совсем понял это выражение: -1?1:-1, что в скобках, что без скобок отдаёт "0"; И подсчет оценки в gc.value не происходит |
Цитата:
Цитата:
answers[ticket].indexOf(chbx[i].value) > -1?1:-1; Описание смотрите здесь Цитата:
Так у вас работать не будет. Надо учитывать различия в html |
Часовой пояс GMT +3, время: 00:26. |