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);
});

setTimeout调用将在 3 秒后解除与模糊事件的绑定,导致该事件不触发。

有关更多信息,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 回答