Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 24.06.2019, 11:32
Интересующийся
Отправить личное сообщение для Freestyle007 Посмотреть профиль Найти все сообщения от Freestyle007
 
Регистрация: 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>
Ответить с цитированием
  #12 (permalink)  
Старый 24.06.2019, 13:50
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Freestyle007,
Сообщение от Freestyle007
если выбрать все 4 варианта, как сделать, чтобы тест не был засчитан и вернулся "0" ?
А если 3?
Ответить с цитированием
  #13 (permalink)  
Старый 24.06.2019, 14:53
Интересующийся
Отправить личное сообщение для Freestyle007 Посмотреть профиль Найти все сообщения от Freestyle007
 
Регистрация: 17.06.2019
Сообщений: 21

Тут ситуация не однозначная: если 1,2,3 варианты, 4 не выбирать - то возвращает "0"; если 1,3,4 варианты, 2 не выбирать - то возвращает "1". При условии, что правильные ответы: 2 и 4.
Что-то я себе уже ум сломал...
Ответить с цитированием
  #14 (permalink)  
Старый 24.06.2019, 14:58
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 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.
Ответить с цитированием
  #15 (permalink)  
Старый 25.06.2019, 04:24
Интересующийся
Отправить личное сообщение для Freestyle007 Посмотреть профиль Найти все сообщения от Freestyle007
 
Регистрация: 17.06.2019
Сообщений: 21

Сообщение от Dilettante_Pro Посмотреть сообщение
А что должно возвращать в какой ситуации? Определите для себя четкие правила, а не ломайте голову.
Например, за отмеченный правильный ответ добавлять к sum 1, за неправильный - вычитать 1. И если sum будет положительная, то вернется 1, иначе 0.

И проверять не так
if(chbx[i].checked && (chbx[i].value == 'v2' || chbx[i].value == 'v4'))

а по массиву правильных ответов.
Можете показать в коде, как это должно выглядеть?
Ответить с цитированием
  #16 (permalink)  
Старый 25.06.2019, 11:38
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 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
Можно сделать, чтобы один неправильный ответ обнулял весь результат по билету.
Ответить с цитированием
  #17 (permalink)  
Старый 25.06.2019, 15:01
Интересующийся
Отправить личное сообщение для Freestyle007 Посмотреть профиль Найти все сообщения от Freestyle007
 
Регистрация: 17.06.2019
Сообщений: 21

Отлично! А как сделать, чтобы при выборе неправильного ответа обнулялся результат?
Ответить с цитированием
  #18 (permalink)  
Старый 25.06.2019, 18:17
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от Freestyle007
как сделать, чтобы при выборе неправильного ответа обнулялся результат?
sum += answers[ticket].indexOf(chbx[i].value) > -1?1:-10;
Ответить с цитированием
  #19 (permalink)  
Старый 26.06.2019, 04:38
Интересующийся
Отправить личное сообщение для Freestyle007 Посмотреть профиль Найти все сообщения от Freestyle007
 
Регистрация: 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.
Ответить с цитированием
  #20 (permalink)  
Старый 26.06.2019, 11:49
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 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