Почему оценка оценивает оценку 1, когда для str установлено значение opt2 и opt3

#javascript

#javascript

Вопрос:

У меня есть функция, которая вычисляет оценку в опросе в зависимости от выбранного параметра, но я всегда получаю то же значение, которое находится в первом if условии, и я предполагаю, что проблема в переменной ответа, потому что она ничего не показывает.

 var questions = [
    {
        "question": "L'impact est ",
        "option1": "faible",
        "option2": "moyen",
        "option3": "haut",
    },
    {
       "question": "L'impact2 est ",
       "option1": "faible",
       "option2": "moyen",
       "option3": "haut",
    },
]

var currentQuestion = 0;
var score1 = 0;
var totQuestions = questions.length;
var number = 0;

var progressText = document.getElementById("progressText");
var container = document.getElementById('quizContainer');
var questionEl = document.getElementById('question');
var opt1 = document.getElementById('opt1');
var opt2 = document.getElementById('opt2');
var opt3 = document.getElementById('opt3');
var nextButton = document.getElementById('nextButton');
var resultCont = document.getElementById('result');
var chartBar = document.getElementById('bar-horzontal');

function loadQuestion(questionIndex) {
    var q = questions[questionIndex];
    questionEl.textContent = (questionIndex   1)   '. '   q.question;
    opt1.textContent = q.option1;
    opt2.textContent = q.option2;
    opt3.textContent = q.option3;
    progressText.innerText = questionIndex   1   ' de '   totQuestions   ' 
questions ';
};

function loadNextQuestion() {
    var selectedOption = 
 document.querySelector('input[type=radio]:checked');
     if (!selectedOption) {
         alert('veuillez sélectionner votre réponse');
         return;
     }

     var answer =selectedOption.Value;      
     if (questions[currentQuestion].opt1 == answer) {
         score1  = 1;
     } else if (questions[currentQuestion].opt2 == answer) {
         score1  = 2;
     } else {
         score1  = 3
     }

     selectedOption.checked = false;
     currentQuestion  ;
     progressText.textContent = questionEl / totQuestions

     if (currentQuestion == totQuestions - 1) {
        nextButton.textContent = 'Finish';
     }
     if (currentQuestion == totQuestions) {
         container.style.display = 'none';
         resultCont.style.display = '';
         resultCont.textContent = 'le résultat est '   ' '   score1   ' ' 
  answer ' ' ;
        return;
     }
     loadQuestion(currentQuestion);
 };
 loadQuestion(currentQuestion);
  

Ответ №1:

В HTML input элементы не имеют свойства textContent , поэтому вам не следует добавлять текст внутри radio элемента, вы можете использовать span или label .

Также q.opt1 есть undefined .

 var questions = [{
    "question": "L'impact est",
    "option1": "faible",
    "option2": "moyen",
    "option3": "haut"
  },
  {
    "question": "L'impact est",
    "option1": "faible",
    "option2": "moyen",
    "option3": "haut"
  }
]

var currentQuestion = 0;
var score1 = 0;
var totQuestions = questions.length;
var number = 0;

var progressText = document.getElementById("progressText");
var container = document.getElementById('quizContainer');
var questionEl = document.getElementById('question');
var opt1 = document.getElementById('opt1');
var opt2 = document.getElementById('opt2');
var opt3 = document.getElementById('opt3');
var lbl_1 = document.getElementById('lbl_1');
var lbl_2 = document.getElementById('lbl_2');
var lbl_3 = document.getElementById('lbl_3');
var nextButton = document.getElementById('nextButton');
var resultCont = document.getElementById('result');
var chartBar = document.getElementById('bar-horzontal');

function loadQuestion(questionIndex) {
  var q = questions[questionIndex];
  questionEl.textContent = (questionIndex   1)   '. '   q.question;
  opt1.value = lbl_1.textContent = q.option1;
  opt2.value = lbl_2.textContent = q.option2;
  opt3.value = lbl_3.textContent = q.option3;
  progressText.innerText = questionIndex   1   ' de '   totQuestions   ' questions ';
};

function loadNextQuestion() {
  var selectedOption = document.querySelector('input[type=radio]:checked');
  if (!selectedOption) {
    alert('veuillez sélectionner votre réponse');
    return;
  }

  var answer = selectedOption.value;
  if (questions[currentQuestion].option1 == answer) {
    score1  = 1;
  } else if (questions[currentQuestion].option2 == answer) {
    score1  = 2;
  } else {
    score1  = 3
  }

  selectedOption.checked = false;
  currentQuestion  ;
  progressText.textContent = "Answered: " (currentQuestion / totQuestions) * 100   "%";

  if (currentQuestion == totQuestions - 1) {
    nextButton.textContent = 'Finish';
  }
  if (currentQuestion == totQuestions) {
    nextButton.style.display = 'none';
    container.style.display = 'none';
    resultCont.style.display = '';
    resultCont.textContent = 'le résultat est '   ' '   score1   ' ';
    return;
  }
  loadQuestion(currentQuestion);
};
loadQuestion(currentQuestion);  
 <div id="quizContainer">
  <p id="question"></p>
  <input id="opt1" name="option" type="radio"><label for="opt1" id="lbl_1"></label>
  <input id="opt2" name="option" type="radio" /><label for="opt2" id="lbl_2"></label>
  <input id="opt3" name="option" type="radio" /><label for="opt3" id="lbl_3"></label>
</div>
<br/>
<button id="nextButton" onclick="loadNextQuestion()">Next</button>
<br/>
<p id="progressText"></p>
<div id="bar-horzontal"></div>
<div id="result"></div>  

Ответ №2:

Я думаю, вы говорите программе добавить дополнительный балл к вариантам 2 и 3. Посмотрите на приведенный ниже код, в котором вы предлагаете добавить 2 балла, если его вариант 2, и и 3 балла, если его вариант 3.

 } else if (questions[currentQuestion].opt2 == answer) {
   score1  = 2;
} else {
   score1  = 3
  

Я думаю, что они должны быть такими.

 } else if (questions[currentQuestion].opt2 == answer) {
   score1  = 1;
} else {
   score1  = 1
  

Комментарии:

1. я не могу вас понять, не могли бы вы уточнить, пожалуйста

2. @mariem как насчет сейчас.

3. я действительно хочу, чтобы функция добавляла 1 балл, если ответ пользователя был первым вариантом, 2 балла, если это был второй вариант, и 3, если это был третий

4. @mariem тогда что вы подразумеваете под оценкой 1

5. это означает, что если я выбираю вариант 1 или option2 или option3, переменная score всегда увеличивается только на 1