0

3秒の送信後にウィンドウがフォーカスを失うかどうかを識別しようとしています。

現在私はこれを持っています:

$("input").on("submit",function(){
$(window).blur(function(){
  console.log(a);
})
});

ただし、これは、[送信]を押しても、ウィンドウの外側をクリックするか、ウィンドウを最小化するとconsole.logトリガーされますa

これは私が達成しようとしていることです:

  1. ユーザーがフォームを送信
  2. 3秒間で、ウィンドウがフォーカスを失った場合は、console.log(a);を実行します。
  3. 3秒後、ウィンドウがフォーカスを失った場合は何もしません。
  4. ユーザーが同じセッションで再度送信する場合は、手順1から繰り返します。
4

1 に答える 1

2

これを試して:

$("#form").on("submit",function(){
    var blurFunc = function() {
        console.log(a);
    }

    $(window).blur(blurFunc);
    setTimeout(function() { $(window).unbind('blur', blurFunc); }, 3000);
});

呼び出しはsetTimeout3秒後にblurイベントからバインド解除され、イベントが発生しなくなります。

詳細については、こちらをsetTimeoutご覧ください:http ://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/

または、次のようにすることもできます。

$("#form").on("submit",function(){
    var submitted = true;

    var blurFunc = function() {
        if(submitted) {
            console.log(a);
        } 
    }

    $(window).blur(blurFunc);
    setTimeout(function() { submitted = false; }, 3000);
});
于 2012-06-07T22:27:29.123 に答える