2010-08-13 3 views
24

Gibt es eine Möglichkeit, wenn ich auf meinen Browser klicke, und ihm den Fokus gebe, eine Methode einmal auszuführen? Und dann, wenn der Browser den Fokus verliert und dann den Fokus wieder erreicht, um diese Methode erneut nur einmal auszuführen.Browserereignis für window.focus()

Danke,

Stab.

Antwort

39

Sie können focus und blur Event-Handler auf dem window Objekt anhängen zu verfolgen, wenn das Fenster oder den Fokus verliert bekommt (siehe http://jsfiddle.net/whQFz/ für ein triviales Beispiel). window gilt für den aktuellen Browserkontext (also könnte es ein Fenster, ein Tab, ein Frame, etc. sein).

Hinweis: Die focus Ereignis wird jedes Mal ausgelöst das Fenster den Fokus erhält und die blur Veranstaltung konzentriert sich jedes Mal, verliert sie abzufeuern. Ein Beispiel für etwas, das den Fokus vom Fenster entfernt, ist ein alert Fenster. Wenn Sie versuchen, in einem onfocus Event-Handler zu alarmieren, erhalten Sie eine Endlosschleife von Alarmen!

// 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

Wie es mit Browser-Kompatibilität ist? –

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

Bitte fügen Sie einen Kommentar für den Downvote ein, da dieser für mich zumindest eine akzeptable Ergänzung zu dieser Frage ist. –

+0

Es ist keine akzeptable Antwort, da es keine .one() Methode gibt, gibt es nur eine .on() Methode, ich habe die Antwort korrigiert. –

+11

Es gibt eine 'one' Methode in jQuery und es ist ziemlich praktisch: https://api.jquery.com/one/ – Lindsay

Verwandte Themen