为什么javascript setTimeout会同时执行所有操作?
我有这个代码,我不知道为什么循环中的所有函数都会同时被调用为什么javascript setTimeout会同时执行所有操作?,javascript,jquery,settimeout,Javascript,Jquery,Settimeout,我有这个代码,我不知道为什么循环中的所有函数都会同时被调用 this.line = function($l) { var $this = this; $this.$len = 0; $('.active').hide(0,function(){ $this.$len = $l.length; var j = 1; $.each($l,function(i,item){ var
this.line = function($l) {
var $this = this;
$this.$len = 0;
$('.active').hide(0,function(){
$this.$len = $l.length;
var j = 1;
$.each($l,function(i,item){
var t = setTimeout(function(){
$this._echoLine($l[i]);
clearTimeout(t);
if (j >= $this.$len) $('.active').show();
j++;
},500*j);
});
});
}
这是因为在超时函数中只增加了
j
,但在注册超时处理程序时延迟(取决于j
)仍然是1
鉴于您仍然有一个循环索引变量(i
),请尝试以下操作:
$l.each(function(i, item) {
setTimeout(function() {
$this._echoLine($l[i]);
}, 500 * (i + 1));
});
// a separate timeout to fire after all the other ones
setTimeout(function() {
$('.active').show();
}, ($l.length + 1) * 500);
不需要使用
clearTimeout
行,因此也不需要声明或存储t
。这是因为在timeout函数中只增加j
,但在注册超时处理程序时延迟(取决于j
)仍然是1
鉴于您仍然有一个循环索引变量(i
),请尝试以下操作:
$l.each(function(i, item) {
setTimeout(function() {
$this._echoLine($l[i]);
}, 500 * (i + 1));
});
// a separate timeout to fire after all the other ones
setTimeout(function() {
$('.active').show();
}, ($l.length + 1) * 500);
无需使用clearTimeout
行,因此也无需声明或存储t
。希望它能工作
this.line = function($l) {
var $this = this;
$this.$len = 0;
$('.active').hide(0,function(){
$this.$len = $l.length;
var j = 1;
$.each($l,function(i,item){
var t = setTimeout(function(){
$this._echoLine($l[i]);
clearTimeout(t);
if (j >= $this.$len) $('.active').show();
j++;
});
});
});
}
setTimeout(function() { this.line(); }, 500);
希望它能起作用
this.line = function($l) {
var $this = this;
$this.$len = 0;
$('.active').hide(0,function(){
$this.$len = $l.length;
var j = 1;
$.each($l,function(i,item){
var t = setTimeout(function(){
$this._echoLine($l[i]);
clearTimeout(t);
if (j >= $this.$len) $('.active').show();
j++;
});
});
});
}
setTimeout(function() { this.line(); }, 500);
你不会将任何时间传递给内部超时。。。故意的?我不明白这个概念@别担心,不仅仅是你。此代码不起作用。很抱歉出错。我编辑了代码。将timeout设置为main函数,这样它就可以解决您的问题。@zonf不,它仍然不能工作。根据Felix的评论,您从未在对
setTimeout
的内部调用上设置超时。您没有向内部超时传递任何时间。。。故意的?我不明白这个概念@别担心,不仅仅是你。此代码不起作用。很抱歉出错。我编辑了代码。将timeout设置为main函数,这样它就可以解决您的问题。@zonf不,它仍然不能工作。根据Felix的评论,您从未在对setTimeout
的内部调用上设置超时。我需要确定是否调用了超时中的函数!我该怎么做?@XIII:这和超时的速度有什么关系?也许你应该解释一下你到底想做什么。寻求问题的解决方案通常比寻求解决方案要好。我需要一个接一个地调用函数队列,我不能使用回调。@XIII为什么不能使用回调?这是在Javascript中触发“以后”操作的唯一方法。您的现有代码正在使用回调!这是一种动画。但在我的代码中,所有这些都在同一时间运行!我需要确定超时中的函数是否被调用!我该怎么做?@XIII:这和超时的速度有什么关系?也许你应该解释一下你到底想做什么。寻求问题的解决方案通常比寻求解决方案要好。我需要一个接一个地调用函数队列,我不能使用回调。@XIII为什么不能使用回调?这是在Javascript中触发“以后”操作的唯一方法。您的现有代码正在使用回调!这是一种动画。但在我的代码中,所有这些都在同一时间运行!