如何在javascript中设置不断递增的计数器,在计数器时执行另一个操作>一定的价值?

时间:2013-07-12 14:28:25

标签: javascript jquery

我是jquery和javascript的新手。我需要在javascript中设置一个变量,每秒后递增1。为此,我做了以下事情:

    function run(){         
      timer++;  
    }// run ends here

   setInterval(run,1000);

一旦变量值> 5,我想启用代码,每当有人在html页面中悬停iframe时,就会完成ajax请求。

在sinigle ajax请求之后我想重置timer = 0。

if(timer>5){
$("iframe").hover(function(){

        $.ajax({
          url:     'http://localhost/test.html',
          cache:   false,
          data:    'html',
          success: function(data,status) {
          }
        });          
});

  timer=0;
}

此过程应再次重复,计数器应再次从0开始到5,并且应再次激活ajax请求功能。

以下是一个地方的完整代码:

<script>

var i = 0;
var timer=0;

        function run(){         
            timer++;    
        }// run ends here

        setInterval(run,1000);          

        if(timer>5){
        $("iframe").hover(function(){

                $.ajax({
                  url:     'http://localhost/test.html',
                  cache:   false,
                  data:    'html',
                  success: function(data,status) {
                  }
                });          
        });

          timer=0;
        }

</script>

我尝试了很多并且google了很多,但是无法弄清楚解决方案。

3 个答案:

答案 0 :(得分:6)

试试这个:

var timer=0;

function run(){         
    timer++;    

    if(timer == 5){
        $("iframe").on('mouseenter', function(){

            $.ajax({
                url:     'http://localhost/test.html',
                cache:   false,
                data:    'html',
                success: function(data,status) {
                    timer=0;
                    $('iframe').off('mouseenter')
                }
            });          
        });

    }
}// run ends here

setInterval(run,1000);          

如果你已经在iframe上有了mouseenter事件,那么.off('mouseenter')会删除那些绑定。

正如Ian所建议的那样,你可以命名为事件,允许你取消绑定特定的绑定。

要做到这一点,只需在绑定/解除绑定时使用一个点:

$("iframe").on('mouseenter.timer',...)
$('iframe').off('mouseenter.timer')

答案 1 :(得分:2)

使用函数memoization来避免全局“计时器”变量:

function run(){
  run.timer = run.timer || 0;   
  return run.timer++;
} // run ends here

setInterval(run,1000);

要对计时器采取相应行动,请从run()开始处理,例如:

function run(){
    run.timer = run.timer || 0;   
    run.timer = handleTimer(run.timer++);
} // run ends here

setInterval(run,1000);

function handleTimer(timer) {
    if(timer > 5){
        $("iframe").hover(function(){
            $.ajax({
                url:     'http://localhost/test.html',
                cache:   false,
                data:    'html',
                success: function(data,status) {
                }
            }); 
            // And disable hover handler once executed
            $("iframe").unbind("mouseenter mouseleave");
        });
        return 0;
    }

    return timer; // continue timer chaining
}

答案 2 :(得分:0)

if语句放入run()并将timer=0移至AJAX通话的success功能。

function run() {
    timer ++;
    if(timer == 5) {
        //Your ajax here
    }
}

你的AJAX success看起来应该是success: function(data, status) { timer = 0;}在你的AJAX成功中,你需要unbind你的iframe悬停,然后在timer > 5时重新绑定它这样当计时器小于5时就会删除悬停功能。