在jQuery/javaScript中遍历对象数组(依赖于时间的迭代)
我是javaScript和jQuery的初学者。我想创建一个只有两个选项的问答游戏 我有一个如下所示的对象数组:在jQuery/javaScript中遍历对象数组(依赖于时间的迭代),javascript,jquery,arrays,Javascript,Jquery,Arrays,我是javaScript和jQuery的初学者。我想创建一个只有两个选项的问答游戏 我有一个如下所示的对象数组: var question = []; question[0] = { value: "someText here", ans: true }; 我将把我所有的问题写成这个对象的数组。这是一个纯粹有趣的游戏,因此如果用户打开源代码并阅读问题,就不会有任何问题。 我想用jQuery来说明这个问题。 为了展示,我写了以下内容: $(
var question = [];
question[0] = {
value: "someText here",
ans: true
};
我将把我所有的问题写成这个对象的数组。这是一个纯粹有趣的游戏,因此如果用户打开源代码并阅读问题,就不会有任何问题。
我想用jQuery来说明这个问题。
为了展示,我写了以下内容:
$("#someID").text(question[i].value); // where i is some random variable
然后我可以调用.click方法并检查用户单击了什么按钮,然后相应地处理情况(更改分数、减少寿命等)。
现在,我想根据时间遍历这个对象数组,这意味着,每个问题都会在屏幕上保留15秒左右,如果用户按下两个按钮中的任何一个,那么下一个问题会立即出现,其他参数也会相应地改变。但是,如果用户在15秒钟内没有按下任何按钮,则会出现下一个问题。我该怎么做
在发布此问题之前,我付出了很多努力:
这个链接上的第一个答案告诉我一些接近我想要实现的东西,但它将其数据放在
标记中,这是我不想要的。我严格地想把它作为对象数组。
有没有办法做到这一点?多谢各位
编辑------
不幸的是,这段代码不适合我。它只是给了我一个警告框,问题在屏幕上没有改变。有什么原因我错了吗?注意:web控制台中没有错误
编辑#2---
这是我的HTML
<!DOCTYPE html>
<html>
<head>
<title>Serious or Joking</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<div id="timer">
<p>00</p>
</div>
<input type="button" value="true" class="answer" id="truebutton" />
<input type="button" value="false" class="answer" id="falsebutton"/>
</body>
</html>
严肃的还是开玩笑的
00
我在visualstudio工作 据我所知,你只需要休息一下 编辑:以下是使用您的代码进行的更新:
var score=0, // variable to store the score of the user.
counter=0;
$(function () {
fetchNextQuestion();
});
function fetchNextQuestion() {
counter++;
if (counter >= 5) {
endTheGame();
}
else {
number = Math.floor(Math.random() * 10);
$("#timer").text(question[number].value);
_qtimer = setInterval(fetchNextQuestion, 15000);
$(".answer").off().on('click', userHasDoneSomething);
}
}
function userHasDoneSomething() {
clearInterval(_qtimer);
if (Boolean(question[number].ans) == Boolean(this.value)) score++;
else score--;
fetchNextQuestion();
}
function endTheGame() {
alert("The game has ended! Your score is "+ score);
}
注意:给你的“真”和“假”元素一个类(.answer)你能告诉我们到目前为止你做了什么吗?如果没有它,我们就无法真正帮助您解决问题。从您的问题来看,如果用户在15秒内没有单击,您只需将[i]索引更改为下一个问题。。是吗?@webkit是的,没错。从
setInterval(fetchNextQuestion,15000)中删除()
代码>您希望传递回调函数,而不是立即初始化它…请阅读我对问题所做的编辑(基于您的答案)。谢谢。当然,我认为问题是当事件发生时必须调用userhasdonesmething()。。我将更新我的答案,看看它是否适用于您。我想您还需要从设置间隔(fetchNextQuestion,15000)中删除()
代码>代码行。您希望提供回调函数,而不是立即初始化函数…@user3763293 War10ck的最后一条注释可能是导致回调的原因,请注意上面代码中的更改(删除了()),然后重试。。让我知道结果,我正在检查你的身份证是真是假。。现在我看到了你的html,我将把它改为value。。我已经更新了我的答案。请注意,我只将this.id更改为this.value
var score=0, // variable to store the score of the user.
counter=0;
$(function () {
fetchNextQuestion();
});
function fetchNextQuestion() {
counter++;
if (counter >= 5) {
endTheGame();
}
else {
number = Math.floor(Math.random() * 10);
$("#timer").text(question[number].value);
_qtimer = setInterval(fetchNextQuestion, 15000);
$(".answer").off().on('click', userHasDoneSomething);
}
}
function userHasDoneSomething() {
clearInterval(_qtimer);
if (Boolean(question[number].ans) == Boolean(this.value)) score++;
else score--;
fetchNextQuestion();
}
function endTheGame() {
alert("The game has ended! Your score is "+ score);
}