2010-08-13 83 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