24.06.2019, 11:32
|
Интересующийся
|
|
Регистрация: 17.06.2019
Сообщений: 21
|
|
Если подойти к проблеме с другой стороны, при использовании "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>
|
|
24.06.2019, 13:50
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Freestyle007,
Сообщение от Freestyle007
|
если выбрать все 4 варианта, как сделать, чтобы тест не был засчитан и вернулся "0" ?
|
А если 3?
|
|
24.06.2019, 14:53
|
Интересующийся
|
|
Регистрация: 17.06.2019
Сообщений: 21
|
|
Тут ситуация не однозначная: если 1,2,3 варианты, 4 не выбирать - то возвращает "0"; если 1,3,4 варианты, 2 не выбирать - то возвращает "1". При условии, что правильные ответы: 2 и 4.
Что-то я себе уже ум сломал...
|
|
24.06.2019, 14:58
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Сообщение от 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'))
а по массиву правильных ответов.
Последний раз редактировалось Dilettante_Pro, 24.06.2019 в 15:00.
|
|
25.06.2019, 04:24
|
Интересующийся
|
|
Регистрация: 17.06.2019
Сообщений: 21
|
|
Сообщение от Dilettante_Pro
|
А что должно возвращать в какой ситуации? Определите для себя четкие правила, а не ломайте голову.
Например, за отмеченный правильный ответ добавлять к sum 1, за неправильный - вычитать 1. И если sum будет положительная, то вернется 1, иначе 0.
И проверять не так
if(chbx[i].checked && (chbx[i].value == 'v2' || chbx[i].value == 'v4'))
а по массиву правильных ответов.
|
Можете показать в коде, как это должно выглядеть?
|
|
25.06.2019, 11:38
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Несколько упрощенный макет
<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
Можно сделать, чтобы один неправильный ответ обнулял весь результат по билету.
|
|
25.06.2019, 15:01
|
Интересующийся
|
|
Регистрация: 17.06.2019
Сообщений: 21
|
|
Отлично! А как сделать, чтобы при выборе неправильного ответа обнулялся результат?
|
|
25.06.2019, 18:17
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Сообщение от Freestyle007
|
как сделать, чтобы при выборе неправильного ответа обнулялся результат?
|
sum += answers[ticket].indexOf(chbx[i].value) > -1?1:-10;
|
|
26.06.2019, 04:38
|
Интересующийся
|
|
Регистрация: 17.06.2019
Сообщений: 21
|
|
Проверил, не работает ни так
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 не происходит
Последний раз редактировалось Freestyle007, 26.06.2019 в 05:49.
|
|
26.06.2019, 11:49
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Сообщение от Freestyle007
|
Проверил, не работает
|
В моем примере Пост16 все работает?
Сообщение от Freestyle007
|
Не совсем понял это выражение: -1?1:-1
|
На самом деле это только кусок выражения. Все выражение в целом
answers[ticket].indexOf(chbx[i].value) > -1?1:-1;
Описание смотрите здесь
Сообщение от Freestyle007
|
подсчет оценки в gc.value не происходит
|
Мне кажется, вы скопировали целиком скрипт из моего упрощенного макета себе?
Так у вас работать не будет. Надо учитывать различия в html
Последний раз редактировалось Dilettante_Pro, 26.06.2019 в 15:19.
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Подсчет оценок |
asdasdasd |
Общие вопросы Javascript |
6 |
06.10.2010 21:18 |
|
|
|