2010-08-13 31 views
24

¿Hay alguna manera de que cuando hago clic en mi navegador y le doy el foco, ejecute un método una vez? Y luego, cuando el navegador pierde el foco y luego vuelve a enfocarse, ejecuta nuevamente ese método solo una vez, nuevamente.evento del navegador para window.focus()

Gracias,

rod.

Respuesta

39

Puede adjuntar focus y blur controladores de eventos en el objeto window para rastrear si la ventana obtiene o pierde el foco (ver http://jsfiddle.net/whQFz/ para un ejemplo trivial). window se aplica al contexto actual del navegador (por lo que podría ser una ventana, una pestaña, un marco, etc.).

Nota: El eventofocus disparará cada vez que la ventana obtiene el foco y el evento blur disparará cada vez que se pierde el foco. Un ejemplo de algo que quita el foco de la ventana es una ventana alert. Si intenta alertar en un controlador de eventos onfocus, obtendrá un bucle infinito de alertas.

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

¿Cómo es la compatibilidad del navegador? –

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

Por favor, incluya un comentario para el voto a favor, ya que, al menos para mí, esto parece ser una adición aceptable a esta pregunta. –

+0

No es una respuesta aceptable, ya que no hay un método .one(), solo hay un método .on(), he corregido tu respuesta. –

+11

Hay un 'uno' método en jQuery y es bastante útil: https://api.jquery.com/one/ – Lindsay

Cuestiones relacionadas