我正在开发一个Web应用程序(JSF / Primefaces),其中显示了许多面板,这些面板最初被一个'加载'但是我试图写一些JavaScript来设置每个面板在1-15秒之后随机解锁,但不一定全部在同一时间彼此解锁(即面板1可能在8秒后解锁,面板2可能会在之后解锁4秒等)。
我已经编写了以下代码来执行此操作:
function hideBlockUI() {
var buiIndex = 0;
while(true) {
var buiComponent = PF('bui_' + buiIndex);
if (buiComponent != null) {
(function(buiIndex) {
setTimeout(function() {hideBUI('bui_' + buiIndex);}, Math.floor((Math.random() * 15) + 1));
})(buiIndex);
} else {
break;
}
buiIndex++;
}
PF('poll').stop();
}
function hideBUI(name) {
PF(name).hide();
}
我看到的行为是所有面板在每次运行中完全同时解锁,而不是以不同的随机间隔。我已经验证了传入hideBUI()的名称是正确的,并且生成的随机超时不同,但行为仍然存在。我做错了什么?
编辑:只是要注意隐藏的组件名为bui_0,bui_1 ... bui_n,具体取决于有多少个面板,直到运行时才知道。
答案 0 :(得分:1)
您的问题是您正在设置时间
Math.floor((Math.random() * 15) + 1)
生成1到15之间的值。因此,浏览器等待的最长时间为15 毫秒。请参阅setTimeout
documentation
使用
修复它 Math.floor((Math.random() * 15) + 1)*1000 // between 1 and 15 seconds