Javascript 为我的测验创建一个上一个按钮
Javascript create a previous button for my quiz
我正在创建一个类似表格的测验,它快完成了。只有一件事我似乎无法弄清楚。我有下一个、上一个和结果按钮,但我似乎无法使上一个按钮起作用。
function PrevQuestion() {
let oldAnswerButton = document.querySelectorAll('.filter_anwser');
// Deletes old question when the next question is clicked
for (let answerButton of oldAnswerButton) {
answerButton.style.display = 'none';
}
let question = Quiz[questionNumber];
// Displays answers of the questions
for (let y = question.chosenAnswer.length; y > 0; y--) {
let item = question.chosenAnswer[0];
// Display answer buttons
let btn = document.createElement('button');
btn.value = item.id;
btn.className = "filter_anwser";
btn.textContent = item.name;
button.appendChild(btn);
}
// Displays Question
questionName.textContent = question.questionDescription;
questionName.id = "questionID";
// Deletes 1 to see the previous question
questionNumber--;
}
您在此处看到的代码是属于与 onclick 链接的下一个按钮的函数。现在我试着编辑它,让它做完全相反的事情,并向我展示之前的问题和答案按钮,但它不起作用。该功能看起来应该有点像这样,但我就是想不通。有人可以帮助我吗?
完整代码:
<link rel="stylesheet" href="./style.css">
<div class="container">
<div id="question"></div>
<div id="answer"></div>
<button onclick="NextQuestion()" id="nextbtn">Next</button>
<button onclick="PrevQuestion()" id="prevbtn">Previous</button>
<div id="finalLink"></div>
</div>
<script type="text/javascript">
class QuizPart{
constructor(questionDescription, chosenAnswer, prefix){
this.questionDescription = questionDescription;
this.chosenAnswer = chosenAnswer;
this.prefix = prefix;
}
}
class ChosenAnswer{
constructor(id, name){
this.id = id;
this.name = name;
}
}
let Quiz = [
new QuizPart('Whats your size?', [
new ChosenAnswer('6595', '41'),
new ChosenAnswer('6598', '42'),
new ChosenAnswer('6601', '43'),
], 'bd_shoe_size_ids='),
new QuizPart('What color would you like?', [
new ChosenAnswer('6053', 'Red'),
new ChosenAnswer('6044', 'Blue'),
new ChosenAnswer('6056', 'Yellow'),
new ChosenAnswer('6048', 'Green'),
], 'color_ids='),
new QuizPart('What brand would you like?', [
new ChosenAnswer('5805', 'Adidas'),
new ChosenAnswer('5866', 'Nike'),
new ChosenAnswer('5875', 'Puma'),
], 'manufacturer_ids=')
]
// console.log(Quiz);
console.log(Quiz.length);
let url = [];
let questionNumber = 0;
let button = document.getElementById('answer');
let questionName = document.getElementById('question');
let nextbtn = document.getElementById('nextbtn');
let resultbtn = document.getElementById('FLink')
function NextQuestion() {
let oldAnswerButton = document.querySelectorAll('.filter_anwser');
// Deletes old question when the next question is clicked
for (let answerButton of oldAnswerButton) {
answerButton.style.display = 'none';
}
let question = Quiz[questionNumber];
// Displays answers of the questions
for (let y = 0; y < question.chosenAnswer.length; y++) {
let item = question.chosenAnswer[y];
// Display answer buttons
let btn = document.createElement('button');
btn.value = item.id;
btn.className = "filter_anwser";
btn.textContent = item.name;
button.appendChild(btn);
}
// Check if your at the last question so the next button will stop being displayed.
if(Quiz.length - 1 === questionNumber){
nextbtn.style.display = 'none';
resultbtn.style.display = 'grid';
}
// Displays Question
questionName.textContent = question.questionDescription;
questionName.id = "questionID";
// adds 1 to question to see a different question
questionNumber++;
}
function PrevQuestion() {
let oldAnswerButton = document.querySelectorAll('.filter_anwser');
// Deletes old question when the next question is clicked
for (let answerButton of oldAnswerButton) {
answerButton.style.display = 'none';
}
let question = Quiz[questionNumber];
// Displays answers of the questions
for (let y = question.chosenAnswer.length; y > 0; y--) {
let item = question.chosenAnswer[0];
// Display answer buttons
let btn = document.createElement('button');
btn.value = item.id;
btn.className = "filter_anwser";
btn.textContent = item.name;
button.appendChild(btn);
}
// Displays Question
questionName.textContent = question.questionDescription;
questionName.id = "questionID";
// Deletes 1 to see the previous question
questionNumber--;
}
</script>
当你写一个for
循环时,括号内有3个部分。第一部分声明一个作用域为循环的变量。第二部分是循环结束的条件。第三部分是每次循环后变量应该如何变化。
您可以在 NextQuestion
:
中看到它完美运行
for (let y = 0; y < question.chosenAnswer.length; y++) { ... }
第一部分声明了一个名为 y
的变量并将其值设置为零。每次循环,第三部分 运行s,因此 y
变为 1
,然后 2
,依此类推。每次都检查第二部分以查看循环是否应该继续。如果 y
仍然小于 question.chosenAnswer
的长度,那么循环将再次 运行,但在某些时候 y
变得等于 question.chosenAnswer.length
并且循环停止.关键是 y
不会自动变大,它会变大,因为这是我们在循环的第三部分指定的。
现在让我们看看 PrevQuestion
中的循环:
for (let y = 0; y > question.chosenAnswer.length; y--) { ... }
再次 y
从零开始,但这次我们每次都减少它的值(使用 y--
)所以它的值变成 -1
然后 -2
等等在。 y
不断变小,因此它永远不会大于 question.chosenAnswer.length
,这将停止循环。这样做的结果是你的循环将无限地运行,并且循环之后的代码将永远不会执行。
在没有看到完整代码的情况下很难确定,但很可能您希望 y++
与 NextQuestion
中的相同。另一种方法是保留 y--
但更改变量的初始变量和结束条件。例如,这样就可以了:
for (let y = question.chosenAnswer.length; y > 0; y--) { ... }
哪种方式最适合您的情况仅取决于您希望 y
获取从 0
到 question.chosenAnswer.length
的值的顺序 - 如果它应该从最小到最大,或者反过来。
我正在创建一个类似表格的测验,它快完成了。只有一件事我似乎无法弄清楚。我有下一个、上一个和结果按钮,但我似乎无法使上一个按钮起作用。
function PrevQuestion() {
let oldAnswerButton = document.querySelectorAll('.filter_anwser');
// Deletes old question when the next question is clicked
for (let answerButton of oldAnswerButton) {
answerButton.style.display = 'none';
}
let question = Quiz[questionNumber];
// Displays answers of the questions
for (let y = question.chosenAnswer.length; y > 0; y--) {
let item = question.chosenAnswer[0];
// Display answer buttons
let btn = document.createElement('button');
btn.value = item.id;
btn.className = "filter_anwser";
btn.textContent = item.name;
button.appendChild(btn);
}
// Displays Question
questionName.textContent = question.questionDescription;
questionName.id = "questionID";
// Deletes 1 to see the previous question
questionNumber--;
}
您在此处看到的代码是属于与 onclick 链接的下一个按钮的函数。现在我试着编辑它,让它做完全相反的事情,并向我展示之前的问题和答案按钮,但它不起作用。该功能看起来应该有点像这样,但我就是想不通。有人可以帮助我吗?
完整代码:
<link rel="stylesheet" href="./style.css">
<div class="container">
<div id="question"></div>
<div id="answer"></div>
<button onclick="NextQuestion()" id="nextbtn">Next</button>
<button onclick="PrevQuestion()" id="prevbtn">Previous</button>
<div id="finalLink"></div>
</div>
<script type="text/javascript">
class QuizPart{
constructor(questionDescription, chosenAnswer, prefix){
this.questionDescription = questionDescription;
this.chosenAnswer = chosenAnswer;
this.prefix = prefix;
}
}
class ChosenAnswer{
constructor(id, name){
this.id = id;
this.name = name;
}
}
let Quiz = [
new QuizPart('Whats your size?', [
new ChosenAnswer('6595', '41'),
new ChosenAnswer('6598', '42'),
new ChosenAnswer('6601', '43'),
], 'bd_shoe_size_ids='),
new QuizPart('What color would you like?', [
new ChosenAnswer('6053', 'Red'),
new ChosenAnswer('6044', 'Blue'),
new ChosenAnswer('6056', 'Yellow'),
new ChosenAnswer('6048', 'Green'),
], 'color_ids='),
new QuizPart('What brand would you like?', [
new ChosenAnswer('5805', 'Adidas'),
new ChosenAnswer('5866', 'Nike'),
new ChosenAnswer('5875', 'Puma'),
], 'manufacturer_ids=')
]
// console.log(Quiz);
console.log(Quiz.length);
let url = [];
let questionNumber = 0;
let button = document.getElementById('answer');
let questionName = document.getElementById('question');
let nextbtn = document.getElementById('nextbtn');
let resultbtn = document.getElementById('FLink')
function NextQuestion() {
let oldAnswerButton = document.querySelectorAll('.filter_anwser');
// Deletes old question when the next question is clicked
for (let answerButton of oldAnswerButton) {
answerButton.style.display = 'none';
}
let question = Quiz[questionNumber];
// Displays answers of the questions
for (let y = 0; y < question.chosenAnswer.length; y++) {
let item = question.chosenAnswer[y];
// Display answer buttons
let btn = document.createElement('button');
btn.value = item.id;
btn.className = "filter_anwser";
btn.textContent = item.name;
button.appendChild(btn);
}
// Check if your at the last question so the next button will stop being displayed.
if(Quiz.length - 1 === questionNumber){
nextbtn.style.display = 'none';
resultbtn.style.display = 'grid';
}
// Displays Question
questionName.textContent = question.questionDescription;
questionName.id = "questionID";
// adds 1 to question to see a different question
questionNumber++;
}
function PrevQuestion() {
let oldAnswerButton = document.querySelectorAll('.filter_anwser');
// Deletes old question when the next question is clicked
for (let answerButton of oldAnswerButton) {
answerButton.style.display = 'none';
}
let question = Quiz[questionNumber];
// Displays answers of the questions
for (let y = question.chosenAnswer.length; y > 0; y--) {
let item = question.chosenAnswer[0];
// Display answer buttons
let btn = document.createElement('button');
btn.value = item.id;
btn.className = "filter_anwser";
btn.textContent = item.name;
button.appendChild(btn);
}
// Displays Question
questionName.textContent = question.questionDescription;
questionName.id = "questionID";
// Deletes 1 to see the previous question
questionNumber--;
}
</script>
当你写一个for
循环时,括号内有3个部分。第一部分声明一个作用域为循环的变量。第二部分是循环结束的条件。第三部分是每次循环后变量应该如何变化。
您可以在 NextQuestion
:
for (let y = 0; y < question.chosenAnswer.length; y++) { ... }
第一部分声明了一个名为 y
的变量并将其值设置为零。每次循环,第三部分 运行s,因此 y
变为 1
,然后 2
,依此类推。每次都检查第二部分以查看循环是否应该继续。如果 y
仍然小于 question.chosenAnswer
的长度,那么循环将再次 运行,但在某些时候 y
变得等于 question.chosenAnswer.length
并且循环停止.关键是 y
不会自动变大,它会变大,因为这是我们在循环的第三部分指定的。
现在让我们看看 PrevQuestion
中的循环:
for (let y = 0; y > question.chosenAnswer.length; y--) { ... }
再次 y
从零开始,但这次我们每次都减少它的值(使用 y--
)所以它的值变成 -1
然后 -2
等等在。 y
不断变小,因此它永远不会大于 question.chosenAnswer.length
,这将停止循环。这样做的结果是你的循环将无限地运行,并且循环之后的代码将永远不会执行。
在没有看到完整代码的情况下很难确定,但很可能您希望 y++
与 NextQuestion
中的相同。另一种方法是保留 y--
但更改变量的初始变量和结束条件。例如,这样就可以了:
for (let y = question.chosenAnswer.length; y > 0; y--) { ... }
哪种方式最适合您的情况仅取决于您希望 y
获取从 0
到 question.chosenAnswer.length
的值的顺序 - 如果它应该从最小到最大,或者反过来。