在javascript循环中睡觉?

我将首先解释我正在尝试做什么:)

我的应用程序是使用PHP(Zend框架)和Javascript实现的。 我想为我的申请做一份调查问卷,到目前为止我做了以下工作:

我的页面由一系列

元素组成,其中#表示特定问题的索引。 例如,我的HTML看起来像这样:

 
. . . etc.

现在,用户应该在特定的预选时间内看到每个问题,直到问题变为可能的答案,并且用户应该单击“是”或“否”,这取决于他是否认为答案是正确的。 一次只有一个

-element是活动的,其他的有display:none; 。 将问题更改为下一个问题后,将从当前问题中删除active -attribute并将其设置为下一个问题,以便用户循环遍历所有问题。

对于每个question/possible answer对,我已经关联了两个整数,这些整数表示用户有时间查看问题以及用户有多长时间回答问题。 让我举个例子:

用户看到这个(或多或少):

 QUESTION 1/10 The name of the President of US? -------------- 5 sec .. The name of the President of US? -------------- 4 sec .. The name of the President of US? -------------- 3 sec .. etc. THE TIME ENDS and the question changes to answer mode(buttons YES/NO appear also in this part): Bruce Wayne? ------------------------------7 sec [YES] [NO] ... Bruce Wayne? ------------------------------6 sec [YES] [NO] ... Bruce Wayne? ------------------------------5 sec [YES] [NO] ... etc. 

当ANSWER阶段的时间用完或者用户点击任一按钮时是/否jQuery从当前问题中删除ACTIVE并将其设置为下一个。 用户单击的值也存储在hidden-element中。 这个过程应该一直通过问卷重复。

现在讲述问答阶段的计时器。 它们不是固定的,而是针对每个问题加以说明。 例如, question1可能有问题/答案时间(以秒为单位) 5/10等等。

现在我的问题是……如何在javascript端实现这个??? 当我通过包含所有关于问题的信息(在服务器中设置PHP)的数组中循环javascript时,我的问题就出现了……我应该能够在客户端迭代所有question/answer – 然后再继续每次迭代都会停止迭代,从而继续前进到下一个(下一个问题),直到用户点击了答案或时间已经用完为止。 但问题是因为我知道我不能在for循环中或在jQuery中的每个中睡觉……你看到我的问题了吗? 🙂

有关实施的任何建议赞赏:)

将for循环更改为通过setTimeout调用的递归函数

 var timeLeft = 10, countdown = function(){ $('#mySpan').html('The name of the President of US? -------------- ' + timeLeft + ' sec'); timeLeft -= 1; if (timeLeft) { setTimeout(countdown, 1000); } }; countdown(); 

采用该逻辑,你可以扩展它以在X秒之后改变你的问题等等,然后你可以通过输入maxTimequestionTextquestionType等参数来缩放它,以显示输入字段或单选按钮组。

快速演示: http : //jsfiddle.net/AlienWebguy/aW9mH/

这是我最近尝试过的一种奇特的方式。 我没有必要建议你做这样的事情而不要有信心你理解它,但它是很好的玩耍。

 function countdown(loops, pause, id) { (function setup(timer, el, text) { (function loop(invalid) { (function check(stop) { return stop || !loops-- || timer(loop, pause); })(invalid || !loops, el[text] = loops); })(!loops || !pause); })(setTimeout, document.getElementById(id) || {}, 'innerHTML'); }​ countdown(10, 1000, 'timer'); 

http://jsfiddle.net/userdude/ghN3m/1

看起来有点奇怪,但试验很有趣。

Javascript是为了使网站反应主动。

所以它不应该只是死了。

如果它真的死了,你的顾客就会走出困境