Викторина и SessionStorage: Как предотвратить накопление точек с помощью кнопки «назад»?Javascript

Форум по Javascript
Ответить
Anonymous
 Викторина и SessionStorage: Как предотвратить накопление точек с помощью кнопки «назад»?

Сообщение Anonymous »

Я создал многостраничную викторину, и я использую API SessionStorage для расчета очков и отображения окончательного балла на последней странице. Каждый раз у меня есть первая страница с викторией.



Answer one


Answer two


MAnswer three



< /code>

const handleSubmit = function () {
const check1 = document.getElementById("q1resp1").checked;
const check2 = document.getElementById("q1resp2").checked;
const check3 = document.getElementById("q1resp3").checked;
const q1 = {
1: check1,
2: check2,
3: check3,
};
window.sessionStorage.setItem("q1", JSON.stringify(q1));
window.location.href = "question-1-answer.html";
};
buttons.forEach((button) => {
button.addEventListener("click", (e) => {
e.preventDefault();
handleSubmit();
});
});

< /code>
Затем вторая страница с ответом: < /p>

const previousChecks = JSON.parse(window.sessionStorage.getItem("q1"));
let score = Number(window.sessionStorage.getItem("score"));
if (!previousChecks[3]) {
score += 1;

window.sessionStorage.setItem("score", String(score));
}

< /code>
Поэтому я имею две страницы для каждого шага викторины. (Одна страница вопросов, одна страница ответа, одна страница вопросов, одна страница ответа и т. Д.). < /p>
В самом конце я указываю окончательный счет.
const score = window.sessionStorage.getItem("score");

document.getElementById("result").innerHTML = score === 0 ? 0 : (score * 100) / 5 + "%";

< /code>
Проблема: как только викторина завершена, если я нажму кнопку «Назад» браузера, чтобы вернуться к последнему вопросу (так что две страницы назад), она автоматически займет предыдущий пункт, сохраненный в сеансе и добавит его к окончательному счету. Отменяет накопленные точки для вопросов 4 и 5, и так далее. Это для обеспечения надежного результата и никогда не превышать 100%. Должен ли я нацелиться на страницу вопроса или страницу ответов? Как я могу сделать так, чтобы точки были отменены, если бы они были, но не были забраны, если бы не было?
любая помощь будет оценена. Но как только я добавляю оператор If Else, чтобы включить сообщение о успехе, оно больше не работает. Есть идеи почему? < /P>
Вот измененный код: < /p>
let q1 = JSON.parse(sessionStorage.getItem('q1'));
let score = Number(sessionStorage.getItem('score')) || 0;

if (!q1.scored) {
if (q1[1] && q1[2]){
score++;
document.querySelector('#correct').style.display = "block";
q1.scored = true;
sessionStorage.setItem('q1', JSON.stringify(q1));
sessionStorage.setItem('score', score);
}else{
document.querySelector('#wrong').style.display = "block";
}
}
< /code>
Теперь, если я вернусь, новые точки добавляются к предыдущим. Я получаю оценки, такие как 120%, 180%и т. Д.

Подробнее здесь: https://stackoverflow.com/questions/797 ... back-butto
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»