繁体   English   中英

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

[英]Using jQuery to recall a function window onblur+ onfocus

如果窗口处于焦点位置,我在使用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时,它开始工作并停止。 我必须单击窗口外并一次又一次地聚焦窗口。 需要通过单击窗口外并再次单击回到窗口来激活它。

    我该怎么办 ?

我在这里看到一些问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM