0

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

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

   setInterval(run,1000);

一旦变量值> 5,我想启用代码,这样,每当有人将鼠标悬停在 html 页面中的 iframe 上时,ajax 请求就完成了。

在单个 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>

我尝试了很多并搜索了很多,但无法找出解决方案。

4

3 回答 3

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')
于 2013-07-12T14:35:05.577 回答
2

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

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
}
于 2013-07-12T14:30:11.170 回答
0

将您的if语句放入run()并转到您的 AJAX 调用timer=0success函数。

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

您的 AJAXsuccess应该看起来像在您的 AJAX 成功中,您success: function(data, status) { timer = 0;}将希望悬停,然后重新绑定它,以便在计时器小于 5 时删除悬停功能。unbindiframetimer > 5

于 2013-07-12T14:30:31.207 回答