我不确定为什么会这样,我很想得到解释。
使用jquery的focus
方法绑定到窗口焦点事件。
这是一个工作示例(将粘贴复制到html文件并在浏览器中打开。由于某种原因在jsfiddle或jsbin中不起作用)
<!DOCTYPE html>
<html>
<head><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script></head>
<body>
<p1>Here:</p1>
<div id="here" >Why</div>
</body>
<script>
$(window).load(function() {
$(window).focus(function() {console.log("focus");});
$(window).blur(function() {console.log("blur");});
});
</script>
</html>
当浏览器重新获得焦点时,该功能会运行两次,并且“焦点”会在控制台中打印两次。 知道为什么会这样吗?
最终目标btw是在用户离开浏览器到应用程序或其他标签时停止计时器运行。
更新
运行最新的(dev)版本的chrome。我会在firefox上测试它并写一下它是否有所不同。
更新2 有趣的事实 - 在Firefox上不会发生。也许它是铬的一个错误。
答案 0 :(得分:1)
live()已被弃用。请改用()代替。
$(window).on("focus", function(){ alert("focus!"); });
您可以尝试使用live()函数。
$(window).live(“focus”,function(){alert(“focus!”);});
答案 1 :(得分:1)
我有同样的问题。我对此的解决方法是使用lodash&#39; //map the data
delPD = delPageData.PageNum.map((x,i) => ({
pageNum: x,
rowNum: delPageData["RowNum"][i],
cName: delPageData["CustomerName"][i],
fName: delPageData["FacilityName"][i],
}));
//sort the data
delPD.sort(function(a,b) {
if(a.pageNum == b.pageNum) {
return (a.rowNum - b.rowNum);
} else {
return (a.pageNum - b.pageNum);
}
});
//give the data an index number for ordering purposes later
for(var i=0; i<delPD.length; i++) {
delPD[i].index = i;
}
函数(https://lodash.com/docs/#debounce)。这是我的修复:
debounce()
答案 2 :(得分:0)
也许load()
被叫两次?您可以在没有.load()
的情况下注册这些活动。试试这个:
<script>
$(window).focus(function() {console.log("focus");});
$(window).blur(function() {console.log("blur");});
</script>
答案 3 :(得分:0)
哪个浏览器?似乎对我来说运行良好。
作为预防措施,您可以使用javascript变量使其仅运行一次。
<script>
var isFocused = false;
$(window).load(function() {
$(window).focus(function() {
if(isFocused)
return;
console.log("focus");
isFocused = true;
});
$(window).blur(function() {
console.log("blur");
isFocused = false;
});
});
</script>
答案 4 :(得分:0)
如果您同时使用下划线,则可以使用_.debounce()
方法将重复事件限制为单个事件。