我遇到一个问题,使用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
}
我的问题是:
当我删除该行时(我在上面标记了问题) 在我单击窗口之前,函数将无法在第一时间工作 让它成为onblur并再次回到焦点,所以它开始起作用。
如果我让那条线(我在上面标明了问题)在那里, 该功能无法暂停,即使我点击窗外即可完成 是onblur。
当我点击焦点时,它开始工作并停止。我必须点击 窗口并一次又一次地关注窗口。需要通过单击窗口并再次单击返回窗口来激活类似的东西。
我该怎么办?
答案 0 :(得分:0)
我在这里看到一些问题:
myInterval
,因此当您致电clearTimeout(myInterval)
时,它不会清除任何内容。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();
};