2010-08-13 3 views
24

브라우저를 클릭하여 포커스를주고 메소드를 한 번 실행하는 방법이 있습니까? 그리고 브라우저가 포커스를 잃었을 때 초점을 다시 잡아서 그 방법을 한 번만 실행하십시오.window.focus()에 대한 브라우저 이벤트

감사합니다.

막대입니다.

답변

39

당신은 창을 가져 오거나 초점 (사소한 예를 들어 http://jsfiddle.net/whQFz/ 참조) 잃으면 추적하기 위해 window 객체에 focusblur 이벤트 핸들러를 첨부 할 수 있습니다. 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

방법 브라우저 호환성 그것을이다? –

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에 대한 코멘트를 포함 시키십시오. 적어도 저에게이 질문에 받아 들일 만하다고 생각됩니다. –

+0

.one() 메서드가 없으므로 받아 들일 수있는 대답이 아닙니다. .on() 메서드 만 있으므로 답변을 수정했습니다. –

+11

jQuery에는 '하나의'메소드가 있으며 매우 편리합니다. https://api.jquery.com/one/ – Lindsay

관련 문제