0

私は jquery と javascript が初めてです。1 秒ごとに 1 ずつ増加する変数を JavaScript で設定する必要があります。そのために私は次のことをしました:

    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 リクエスト機能が再びアクティブ化されます。

以下は、完全なコードを 1 か所にまとめたものです。

<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')するとそれらのバインディングが削除されます。

イアンが提案したように、イベントに名前を付けて、特定のバインディングをアンバインドできるようにすることができます。

これを行うには、バインド/バインド解除時にドットを使用します。

$("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ステートメントを入れて、AJAX 呼び出しの関数にrun()移動timer=0します。success

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

AJAXsuccessは次のようsuccess: function(data, status) { timer = 0;}になります。 AJAX の成功ではunbindiframeホバーしてから再バインドしてtimer > 5、タイマーが 5 未満のときにホバー機能が削除されるようにする必要があります。

于 2013-07-12T14:30:31.207 に答える