在javascript循环中睡觉?
我将首先解释我正在尝试做什么:)
我的应用程序是使用PHP(Zend框架)和Javascript实现的。 我想为我的申请做一份调查问卷,到目前为止我做了以下工作:
我的页面由一系列
. . . etc.
现在,用户应该在特定的预选时间内看到每个问题,直到问题变为可能的答案,并且用户应该单击“是”或“否”,这取决于他是否认为答案是正确的。 一次只有一个
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秒之后改变你的问题等等,然后你可以通过输入maxTime
, questionText
和questionType
等参数来缩放它,以显示输入字段或单选按钮组。
快速演示: 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是为了使网站反应不主动。
所以它不应该只是死了。
如果它真的死了,你的顾客就会走出困境