JavaScript中只能有一个超时吗?

时间:2011-04-07 16:37:21

标签: javascript timer settimeout

此代码似乎不起作用......它在很长一段时间后仅显示twCharCount元素一次。可能只有一个超时设置?有什么建议让这段代码更好吗? 谢谢你的任何建议......

var timer = new Array();
var t=0;
var step=1000;
counter.hide();
var t =+ step;
timer[0] = setTimeout("$('#twCharCount').show()",t);
var t =+ step;
timer[1] = setTimeout("$('#twCharCount').hide()",t);
var t =+ step;
timer[2] = setTimeout("$('#twCharCount').show()",t);
var t =+ step;
timer[3] = setTimeout("$('#twCharCount').hide()",t);
var t =+ step;
timer[4] = setTimeout("$('#twCharCount').show()",t);

好吧..对不起......我写这篇文章的时候并不是很清醒...... 当然我一直在重新开始......这就是为什么所有人都在同步执行......

5 个答案:

答案 0 :(得分:3)

var intervalId = window.setInterval(function() {
    $('#twCharCount').toggle();
}, 1000);

并停止闪烁window.clearInterval(intervalId);

答案 1 :(得分:2)

可能只是一些语法问题:

var timer = [];
var t=0;
var step=1000;
counter.hide();
t += step;
timer[0] = setTimeout("$('#twCharCount').show()", t);
t += step;
timer[1] = setTimeout("$('#twCharCount').hide()", t);
t += step;
timer[2] = setTimeout("$('#twCharCount').show()", t);
t += step;
timer[3] = setTimeout("$('#twCharCount').hide()", t);
t += step;
timer[4] = setTimeout("$('#twCharCount').show()", t);

t =+step;应为t += step;

你不应该一遍又一遍地重新宣布。

答案 2 :(得分:1)

代码在很多方面都是错误的:( 你的函数都在同一时间被调用,因为它们的时间(t)是相同的。

如果你想增加t,你可能不应该在每次访问时声明它(仅使用var t = ...一次;之后你可以通过它的名称访问它:t = ...)和您应该使用+=代替=+
a += ba = a + b的快捷方式,而a =+ ba = parseInt(b)的快捷方式。
你可能想写:

var timer = [];
var t=0;
var step=1000;
counter.hide();
t += step;
timer[0] = setTimeout("$('#twCharCount').show()", t);
t += step;
timer[1] = setTimeout("$('#twCharCount').hide()", t);
t += step;
timer[2] = setTimeout("$('#twCharCount').show()", t);
t += step;
timer[3] = setTimeout("$('#twCharCount').hide()", t);
t += step;
timer[4] = setTimeout("$('#twCharCount').show()", t);

还有一件事,最好是传递函数而不是字符串作为setTimeout函数的第一个参数:

setTimeout(function(){$('#twCharCount').show();},t);

Sry,但我无法帮助自己,这是为您优化的代码:

var timer = [],
step = 1000,
n = 4,
el = $('#twChartCount');
for(var i=0;i<n;i++)
    if(i%2)
        timer[i] = setTimeout(function(){el.hide();},i*step);
    else
        timer[i] = setTimeout(function(){el.show()},i*step);

答案 3 :(得分:0)

活动超时的数量几乎没有限制。

我发现您的代码没有任何实际问题。问题可能不是超时,而是你正在执行的命令。

附加说明(与您的问题无关,但值得一提):

  • 每个函数只需要一个变量的'var'语句。
  • 而不是计时器[...]我在这种情况下使用timer.push()
  • 您可以使用单个setInterval()代替

答案 4 :(得分:0)

var show = false;
window.setInterval(function() {
   if(show)
   {
      show = false;
      $('#twCharCount').show();
   }
   else
   {
      show = true;
      $('#twCharCount').hide();
   }
}, 1000);