0

如果窗口处于焦点上,我在使用 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. 当我删除那条线(我在上面标记了问题)时,该功能将不会在第一次工作,直到我点击窗外使其变得模糊并再次回到焦点,所以它开始工作。

  2. 如果我让那条线(我在上面标记了问题。)在那里,该功能无法暂停,即使我点击窗外使其成为模糊。

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

    我应该怎么办 ?

4

1 回答 1

0

我在这里看到一些问题:

  1. 你没有设置myInterval所以当你打电话时clearTimeout(myInterval)它不会清除任何东西。
  2. 您正在使用相同的函数来设置您的侦听器并setTimeout递归调用。这意味着每次递归时都会设置您的处理程序,并且递归意味着无论处理程序是否运行,它都会运行。

我认为你需要把事情分开一点:

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();
};
于 2013-09-09T19:30:47.160 回答