изменить текст метки всех переключателей в викторине на красный и зеленый - PullRequest
0 голосов
/ 17 декабря 2018

Ниже приведен код примера викторины с переключателями, в котором предусмотрено несколько переключателей.Правильные и неправильные ответы определены в коде.Пользователь может проверить любой ответ или оставить все пустым.Если пользователь проверяет любую радиокнопку и, наконец, нажимает кнопку «Оценить меня», текст метки радиокнопки о любых неправильных ответах, проверенных пользователем, должен отображаться красным цветом, и в то же время правильный ответ на этот конкретный вопрос должен отображаться зеленым цветом (это будетпомочь пользователю узнать, на какой вопрос он ответил неправильно и каков его правильный ответ).Я пробовал несколько шагов, искал много форумов и потерпел неудачу.Я думаю, что это будет действительно просто.

Пример:

var numQues = 3;
var numChoi = 3;
var answers = new Array(3);
answers[0] = "doesn't like";
answers[1] = "don't come";
answers[2] = "come";
var wrong = new Array(3);
wrong[0] = "don't like";
wrong[1] = "doesn't come";
wrong[2] = "comes";
var wrong1 = new Array(3);
wrong1[0] = "doesn't likes";
wrong1[1] = "doesn't comes";
wrong1[2] = "coming";

function getScore(form) {
  var score = 0;
  var currElt;
  var currSelection;
  for (i = 0; i < numQues; i++) {
    currElt = i * numChoi;
    answered = false;
    for (j = 0; j < numChoi; j++) {
      currSelection = form.elements[currElt + j];
      if (currSelection.checked) {
        answered = true;
        if (currSelection.value == answers[i]) {
          score += 3;
          break;
        }
        if (currSelection.value == wrong[i]) {
          score -= 1;
          break;
        }
        if (currSelection.value == wrong1[i]) {
          score -= 1;
          break;
        }
      }
    }
  }
  var scoreper = Math.round(score * 100 / 9);
  form.percentage.value = scoreper + "%";
  form.mark.value = score;
}
<title>Quiz Questions And Answers</title>
<center>
  <h1>Quiz Questions</h1>
</center>
<p>
  <form name="quiz">
    <p>
      <b><br>1. He -------------------- it.<br></b>
      <label><input type="radio" name="q1" value="don't like">don't like</label><br>
      <label><input type="radio" name="q1" value="doesn't like">doesn't like</label><br>
      <label><input type="radio" name="q1" value="doesn't likes">doesn't likes</label><br>
      <p><b>
        <hr>
        <br>2. They -------------------- here very often.<br></b>
        <label><input type="radio" name="q2" value="don't come">don't come</label><br>
        <label><input type="radio" name="q2" value="doesn't come">doesn't come</label><br>
        <label><input type="radio" name="q2" value="doesn't comes">doesn't comes</label><br>
        <p><b>
        <hr>
        <br>3. John and Mary -------------------- twice a week.<br></b>
          <label><input type="radio" name="q3" value="come">come</label><br>
          <label><input type="radio" name="q3" value="comes">comes</label><br>
          <label><input type="radio" name="q3" value="coming">coming</label>
          <br>
          <p><b>
        <hr>
        <p><b>
        <input type="button"value="Grade Me"onClick="getScore(this.form);">
        <input type="reset" value="Clear"><p>
        Number of score out of 15 = <input type= text size 15 name= "mark">
        Score in percentage = <input type=text size=15 name="percentage"><br>
        </form>
        <p>
        <form method="post" name="Form" onsubmit="" action="">
        </form>

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Вот переписать ваш код.Я исправил недопустимый HTML и использовал лучшие практики с прослушивателями событий, querySelectors и CSS

Пожалуйста, изучите код и посмотрите, понимаете ли вы.Я могу добавить больше комментариев, если это необходимо

var answers = ["doesn't like","don't come","come"];
var rads, quiz; // need to be set after load
window.addEventListener("load",function() { // when page loads
  quiz = document.getElementById("quiz");
  rads = quiz.querySelectorAll("input[type=radio]"); // all radios in the quiz
  document.getElementById("scoreButton").addEventListener("click",function(e) { // on click of scoreme
    var score = 0;
    for (var i=0;i<rads.length;i++) { // loop over all radios in the form
      var rad = rads[i];
      var idx = rad.name.substring(1)-1; //remove the q from the name - JS arrays start at 0
      var checked = rad.checked;
      var correct = rad.value==answers[idx];
      
      if (correct) {
        rad.closest("label").classList.toggle("correct");
        if (checked) score +=3;
      }  
      else if (checked) {
        score--;
        rad.closest("label").classList.toggle("error")
      }  
    }
    var scoreper = Math.round(score * 100 / rads.length);
    document.querySelector("#percentage").innerHTML = scoreper + "%";
    quiz.mark.value = score;
  });  
});
.correct {
  color: green
}

.error {
  color: red
}
<title>Quiz Questions And Answers</title>
<div class="header">
  <h1>Quiz Questions</h1>
</div>
<form id="quiz">
  <div class="questions">
    <p>
      <b>1. He -------------------- it.</b><br/>
      <label><input type="radio" name="q1" value="don't like" />don't like</label><br/>
      <label><input type="radio" name="q1" value="doesn't like" />doesn't like</label><br/>
      <label><input type="radio" name="q1" value="doesn't likes" />doesn't likes</label>
    </p>
    <hr>
    <p><b>2. They -------------------- here very often.</b><br/>
      <label><input type="radio" name="q2" value="don't come">don't come</label><br/>
      <label><input type="radio" name="q2" value="doesn't come">doesn't come</label><br/>
      <label><input type="radio" name="q2" value="doesn't comes">doesn't comes</label>
    </p>
    <hr>
    <p><b>3. John and Mary -------------------- twice a week.</b><br/>
      <label><input type="radio" name="q3" value="come">come</label><br/>
      <label><input type="radio" name="q3" value="comes">comes</label><br/>
      <label><input type="radio" name="q3" value="coming">coming</label><br/>
    </p>
    <hr>
    <p>
      <input type="button" value="Grade Me" id="scoreButton">
      <input type="reset" value="Clear"><br/> 
      Number of score out of 15 = <input type="text" size="15" id="mark"> 
      Score in percentage = <span id="percentage"></span>
    <p>
  </div>
</form>
0 голосов
/ 18 декабря 2018

WoW! .... Закрыть .... Спасибо за поддержку.Но все же все неправильные ответы показывают красным цветом.Это позволит пользователю узнать, на какой вопрос он ответил неправильно.Эта часть в порядке.Но как только неправильные ответы помечаются красным (я имею в виду только неправильно выбранные тексты выбора радиокнопок, а не весь выбор вопросов и ответов

правильный ответ этой неправильной попыткичтобы показать его зеленым, чтобы просветить пользователя. И печальная часть в том, что я снова потерпел неудачу с CSS. Я хотел создать тест в блоге и добавил пользовательский CSS с условным тегом в html поста блоггера ..... НеРаботаю. Однако я добавлю здесь модифицированный код, чтобы вы получили ясную картину, если я поступаю правильно, как вы сказали. (Как и где добавить правила CSS внутри этого кода (если это то, что вы имеете в виду))

<!DOCTYPE HTML>
<html>
<body>
<title>Quiz Questions And Answers</title>
<div class="header">
    <h1>Quiz Questions</h1>
</div>
<form id="quiz">
    <div class="questions">
        <p>
        <b>1. He -------------------- it.</b><br/>
        <label><input type="radio" name="q1" value="don't like" />don't like</label><br/>
        <label><input type="radio" name="q1" value="doesn't like" />doesn't like</label><br/>
        <label><input type="radio" name="q1" value="doesn't likes" />doesn't likes</label>
        </p>
        <hr>
        <p><b>2. They -------------------- here very often.</b><br/>
        <label><input type="radio" name="q2" value="don't come">don't come</label><br/>
        <label><input type="radio" name="q2" value="doesn't come">doesn't come</label><br/>
        <label><input type="radio" name="q2" value="doesn't comes">doesn't comes</label>
        </p>
        <hr>
        <p><b>3. John and Mary -------------------- twice a week.</b><br/>
        <label><input type="radio" name="q3" value="come">come</label><br/>
        <label><input type="radio" name="q3" value="comes">comes</label><br/>
        <label><input type="radio" name="q3" value="coming">coming</label><br/>
        </p>
        <hr>
        <p>
        <input type="button" value="Grade Me" id="scoreButton">
        <input type="reset" value="Clear"><br/> 
        Number of score out of 15 = <input type="text" size="15" id="mark"> 
        Score in percentage = <span id="percentage"></span>
        <p>
    </div>
 </form>
 <script>
     var answers = ["doesn't like","don't come","come"];
     var rads, quiz; // need to be set after load
     window.addEventListener("load",function() { // when page loads
         quiz = document.getElementById("quiz");
         rads = quiz.querySelectorAll("input[type=radio]"); // all radios in the quiz
        document.getElementById("scoreButton").addEventListener("click",function(e) { // on submit
            var score = 0;
            var checked = quiz.querySelectorAll("input[type=radio]:checked"); // all checked radios
            for (var i=0;i<checked.length;i++) { // loop over all checked radios in the form
                var idx = checked[i].name.substring(1)-1; //remove the q from the name - JS arrays start at 0
                var correct = checked[i].value==answers[idx];
                checked[i].closest("p").classList.toggle("error",!correct)
                checked[i].closest("p").classList.toggle("correct",correct)
                score += correct?3:-1; // this is called a ternary
            }
            var scoreper = Math.round(score * 100 / rads.length);
            document.querySelector("#percentage").innerHTML = scoreper + "%";
            quiz.mark.value = score;
        });  
    });
</script>
</body>
</html>
0 голосов
/ 17 декабря 2018

В вашей функции getScore, когда вы обнаружите, что для определенного элемента выбран правильный ответ (в зависимости от того, какая переменная является меткой - если вы не используете настраиваемую радиокнопку, которую я бы порекомендовал, так как изменился фон элемента меткипросто выделите слова), вы можете дать ему новый класс, используя JS.

currSelection.classList.add("correct");

или

currSelection.classList.add("incorrect");

Тогда в вашем файле CSS вы можете иметь правила, говорящие

.correct { background: green !important; }

.incorrect { background: red !important; }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...