$("#question2").hide();
const options = [$(".option1"), $(".option2"), $(".option3"), $(".option4")];
let randomOption = function() {
const texts = options
.map(opt => opt[0].textContent)
.sort(() => .5 - Math.random());
$(".option1").text(texts[0]);
$(".option2").text(texts[1]);
$(".option3").text(texts[2]);
$(".option4").text(texts[3]);
}
$("#question1 button").click(function() {
if ($(this).hasClass("correct")) {
$("#question1").fadeOut();
$("#question2").fadeIn();
} else {
$(this).text("X")
}
})
$("#question2 button").click(function() {
if ($(this).hasClass("correct")) {
$("#question2").fadeOut();
$("#question1").fadeIn();
} else {
$(this).text("X")
}
})
console.log(randomOption())button {
background-color: rgb(192, 235, 179)
}
.container {
margin-top: 300px;
display: flex;
justify-content: center;
align-self: center;
}
button {
font-size: 50px;
margin: 30px;
width: 80px;
}<div class="container">
<div id="question1">question 1
<button class="option1 correct">1</button>
<button class="option2">2</button>
<button class="option3">3</button>
<button class="option4">4</button>
</div>
<div id="question2">question 2
<button class="option1">1</button>
<button class="option2 correct">2</button>
<button class="option3">3</button>
<button class="option4">4</button>
</div>
</div>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">
</script>How random option catch correspondent number ?
For example:
If question random option is (4) (2) (3) (1) arrangement
Answer should be (1),because set class=”correct” in question1 option1 but in the case (1) is X (wrong answer).
I guess it get <div> position, so array and real number not match.
What’s wrong with my code?
Advertisement
Answer
Your are fixing correct class on theses positions. Add correct when generate random values:
$('#question1 button:contains("1")').addClass("correct");
$('#question2 button:contains("2")').addClass("correct");
Live example with dynamic positions:
$("#question2").hide();
const options = [$(".option1"), $(".option2"), $(".option3"), $(".option4")];
let randomOption = function() {
const texts = options
.map(opt => opt[0].textContent)
.sort(() => .5 - Math.random());
$(".option1").text(texts[0]);
$(".option2").text(texts[1]);
$(".option3").text(texts[2]);
$(".option4").text(texts[3]);
let correct1 = randomInteger(1, 4);
let correct2 = randomInteger(1, 4);
$('#question1 button:contains(' + correct1 + ')').addClass("correct");
$('#question2 button:contains(' + correct2 + ')').addClass("correct");
}
$("#question1 button").click(function() {
if ($(this).hasClass("correct")) {
$("#question1").fadeOut();
$("#question2").fadeIn();
} else {
$(this).text("X")
}
})
$("#question2 button").click(function() {
if ($(this).hasClass("correct")) {
$("#question2").fadeOut();
$("#question1").fadeIn();
} else {
$(this).text("X")
}
})
function randomInteger(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(randomOption());button {
background-color: rgb(192, 235, 179)
}
.container {
margin-top: 300px;
display: flex;
justify-content: center;
align-self: center;
}
button {
font-size: 50px;
margin: 30px;
width: 80px;
}<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
<div id="question1">question 1
<button class="option1">1</button>
<button class="option2">2</button>
<button class="option3">3</button>
<button class="option4">4</button>
</div>
<div id="question2">question 2
<button class="option1">1</button>
<button class="option2">2</button>
<button class="option3">3</button>
<button class="option4">4</button>
</div>
</div>Perhaps in addition to dynamic positions for improvement you can also put dynamic responses instead of 1 for question 1 and 2 for question 2:
A simple adjustment can do it:
let randomOption = function() {
const texts = options
.map(opt => opt[0].textContent)
.sort(() => .5 - Math.random());
$(".option1").text(texts[0]);
$(".option2").text(texts[1]);
$(".option3").text(texts[2]);
$(".option4").text(texts[3]);
let correct1 = randomInteger(1, 4);
let correct2 = randomInteger(1, 4);
$('#question1 button:contains(' + correct1 + ')').addClass("correct");
$('#question2 button:contains(' + correct2 + ')').addClass("correct");
}
With simple helper function:
function randomInteger(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}