我似乎无法获得jquery变量来保留它们的价值

时间:2014-07-04 02:24:24

标签: jquery variables global-variables

我正在尝试创建一个从0开始的全局变量,每秒增加1.这是我的代码:

$(document).ready(function()
{
    time = 0;

    setTimeout(function(){
        time += 1;
    }, 1000);

});

问题在于,当我输出时间值(在时间+ = 1行之后)时,该值始终为1.我希望它为1,2,3,4,5,...等等。我已经看到,不在变量声明前放置var使其成为全局变量,但这并没有保留该值。

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

我该怎么做?

3 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分:0)

你只需要调用setTimeout()一次,所以时间只增加一次,而不是每秒重复一次。你可以使用一个带有一个私有作用域time变量的闭包构建一个计时器函数来轻松地做到这一点,该变量每秒调用一次以进行更新。

$(document).ready(function(){

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

  timer();

});

答案 2 :(得分:0)

以下是一个有效的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>

注意,我在setTimeout上使用了setInterval。这只是因为它更适合您的目标。