2010-08-13 52 views
24

有没有一种方法,当我点击我的浏览器,并给它的焦点,运行一次方法?然后,当浏览器失去焦点,然后再次重新运行该方法时,只需运行一次。window.focus的浏览器事件()

谢谢,

杆。

回答

39

您可以window对象上附加focusblur事件处理程序来跟踪如果窗口得到或失去焦点(见http://jsfiddle.net/whQFz/为一个简单的例子)。 window适用于当前的浏览器上下文(以便可以是窗口,选项卡,框架等)。

注意:focus事件将在每次窗口获得焦点时触发,并且每次失去焦点时将触发blur事件。一个将焦点从窗口中移除的例子是alert窗口。如果您尝试在onfocus事件处理程序中发出警报,您将收到无限循环的警报!

// Set global counter variable to verify event instances 
var nCounter = 0; 

// Set up event handler to produce text for the window focus event 
window.addEventListener("focus", function(event) 
{ 
    document.getElementById('message').innerHTML = "window has focus " + nIndex; 
    nCounter = nCounter + 1; 
}, false); 

// Example of the blur event as opposed to focus 
// window.addEventListener("blur", function(event) { 
// document.getElementById('message').innerHTML = "window lost focus"; }, 
// false); 
+5

它是如何与浏览器的兼容性? – 2013-12-06 18:23:39

12
$(document).ready(function() { $(window).one("focus", SomeFocusMethod); }); 

var SomeFocusMethod = function() 
{ 
    // do stuff 
    $(window).one("blur", SomeBlurMethod); 
} 

var SomeBlurMethod = function() 
{ 
    // do stuff 
    $(window).one("focus", SomeFocusMethod); 
} 
+2

请包括downvote的评论,因为这对我来说至少是一个可以接受的附加问题。 – 2014-07-19 14:43:32

+0

这不是一个可以接受的答案,因为没有.one()方法,只有一个.on()方法,我纠正了你的答案。 – 2015-04-16 13:03:40

+11

jQuery中有一种方法,它非常方便:https://api.jquery.com/one/ – Lindsay 2015-06-02 21:14:39