使用jQuery调用函数窗口onblur + onfocus

时间:2013-09-09 19:06:57

标签: javascript jquery

我遇到一个问题,使用jQuery来调用功能如果窗口处于焦点上。 当窗口没有聚焦(onblur)时,请暂停该功能,直到窗口再次聚焦为止。

这是我的代码:

function functiondosomething (user_id) {

var myInterval;
var time_delay = 1000;


    $(window).focus(function () {

 setTimeout(function() { functiondosomething (user_id); }, time_delay);


    }).blur(function () {
        clearTimeout(myInterval); // Clearing interval on window blur

    });

 setTimeout(function() { functiondosomething (user_id); }, time_delay);// ## problem here

}

我的问题是:

  1. 当我删除该行时(我在上面标记了问题) 在我单击窗口之前,函数将无法在第一时间工作 让它成为onblur并再次回到焦点,所以它开始起作用。

  2. 如果我让那条线(我在上面标明了问题)在那里, 该功能无法暂停,即使我点击窗外即可完成 是onblur。

  3. 当我点击焦点时,它开始工作并停止。我必须点击 窗口并一次又一次地关注窗口。需要通过单击窗口并再次单击返回窗口来激活类似的东西。

    我该怎么办?

1 个答案:

答案 0 :(得分:0)

我在这里看到一些问题:

  1. 您没有设置myInterval,因此当您致电clearTimeout(myInterval)时,它不会清除任何内容。
  2. 您正在使用相同的功能来设置您的侦听器并递归调用setTimeout。这意味着每次重复时都会设置处理程序,递归意味着无论处理程序是否运行,它都会运行。
  3. 我认为你需要稍微分开一些事情:

    function functiondosomething(user_id) {
      // Do stuff...
    }
    
    function setupHandlers(user_id) {
      var myInterval;
      var time_delay = 1000;
    
      function doSomethingWrapper() { 
        functiondosomething(user_id);
        myInterval = setTimeout(doSomethingWrapper, time_delay); 
      }
    
      $(window).focus(function () {
        doSomethingWrapper();
      }).blur(function () {
        clearTimeout(myInterval); // Clearing interval on window blur
      });
      doSomethingWrapper();
    };