我似乎无法让 jquery 变量保留它们的值



我试图创建一个全局变量,从0开始,每秒钟增加1。下面是我的代码:

$(document).ready(function()
{
    time = 0;
    setTimeout(function(){
        time += 1;
    }, 1000);
});

问题是,当我输出time的值时(在time += 1行之后),该值总是1。我想让它走1,2,3,4,5,…等等......我已经看到,不把var放在变量声明的前面使它成为全局的,但这并没有保留值。

在我看来,问题是time = 0每周期重置为0,但我不知道如何防止这种情况发生。我不能忽略给time赋值,因为给空变量加1是不好的。

我该怎么做?

我想你可能想要setInterval而不是setTimeout

$(document).ready(function () {
    var time = 0;
    setInterval(function () {
        time += 1;
        console.log(time);
    }, 1000);
});

注意上面的'time'值限定在函数的范围内。如果您需要将其设置为全局:

var time = 0;
$(document).ready(function () {
    setInterval(function () {
        time += 1;
        console.log(time);
    }, 1000);
});

您只调用setTimeout()一次,因此时间只增加一次,而不是每秒重复一次。你可以很容易地做到这一点,用闭包构建一个定时器函数,用一个私有范围的time变量,每秒调用自己来更新。

$(document).ready(function(){
  var timer = (function() {
    var time = 0;
    return function() {
      console.log("> time = %d", time);
      time += 1;
      setTimeout(timer, 1000);
    };
  })();
  timer();
});

这里是一个工作的JavaScript示例:

<!doctype html>
<html>
<head><title></title></head>
<body>
    <input />
    <script type="text/javascript">
        var el, time;
        el = document.getElementsByTagName('input')[0];
        time = 0;
        setInterval(function(){
            time++;
            el.value = time;
        }, 1000);   
    </script>
<body>

注意,我使用setInterval而不是setTimeout。这只是因为它更符合您的目标。

相关内容

  • 没有找到相关文章

最新更新