Я создал многостраничную викторину, и я использую 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
Викторина и SessionStorage: Как предотвратить накопление точек с помощью кнопки «назад»? ⇐ Javascript
Форум по Javascript
1755691474
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%и т. Д.
Подробнее здесь: [url]https://stackoverflow.com/questions/79739290/quiz-and-sessionstorage-how-to-prevent-point-accumulation-with-the-back-butto[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия