2011-02-28 2 views
3

문제는 채팅과 같은 프로그램을 만들고있어 사용자가 창을 떠났을 때 또는 다른 창이나 탭으로 변경하면 다른 사용자가 볼 수 있도록해야한다는 것입니다. 다른 사용자가 지금 당장 페이지를 보지 못했다는 것을 의미합니다.

나는 윈도우 이벤트 포커스 아웃이 내 문제를 해결할 것이라고 생각했지만, 몇 가지 문제가있다. 첫 번째 : 사용자가 창을 떠날 때만 시작되지 않습니다. 입력 필드에 집중 한 다음 페이지의 다른 곳을 클릭하면 이벤트가 실행됩니다. 분명히 그건 용납 할 수없는 일입니다. Firefox에서 그 문제를 해결했습니다. 파이어 폭스에서 그런 일이 발생하면 브라우저는 focusout 이벤트를 한 번 발생시킨다. 그러나 창을 실제로 나가면 두 번 발사합니다. 그래서 약간의 프로그래밍으로 마술을 만들었습니다.

다음 두 번째 문제가 발생했습니다. 크롬, 나는 다른 브라우저가 똑같이 동작 할 수도 있다고 믿지만, 무엇을 하든지 포커스 아웃 이벤트 만 발생시킵니다. 창을 떠나 포커스를 입력에서 페이지로 변경하는 것은 똑같습니다. 따라서 프로그래밍이 제대로 작동하지 않았습니다.

원하는 동작을 시뮬레이트하는 방법을 아는 사람이 있습니까? 아니면 크롬과 다른 브라우저가 파이어 폭스처럼 행동하도록 만드는 방법이나 뭐든간에?

감사합니다.

+0

나는 당신이하고 싶은 것이 실제로는 오늘날의 브라우저에서 가능하다고 생각하지 않습니다. – Pointy

+0

'$ (document) .bind ("mouseleave", function() {...})'을 시도 했습니까? – Mottie

+0

@Pointy'window.onblur' 핸들러는 잘 동작합니다. blur 이벤트는 사용자가 다른 탭으로 전환 할 때마다 window 객체에서 시작됩니다. –

답변

7

사용 blur 사용에 대한 회담 :

$(window).blur(function() { 
    // code 
}); 

의 차이는 focusout는 DOM 트리를 거품과 blur하지 않는 것입니다. window 객체에 focusout을 설정하면 페이지 요소에서 발생하는 모든 blur 이벤트가 사용자가 원하지 않는 핸들러를 트리거합니다.

차이점은 focusout (창 개체에 설정된 경우) 페이지에서 (모든 요소에서) 발생하는 모든 흐림 이벤트를 캡처한다는 것입니다. 대조적으로 blur (창 개체에 설정된 경우)은 해당 흐림 이벤트를 캡처하지 않습니다.

라이브 데모 : 내가 질문에 대답http://jsfiddle.net/simevidas/taRG6/

+0

감사! 그게 내 문제를 해결 했어! –

+0

나는 jQuery가 이미 Firefox와 Chrome 및 초점 출력 양식 IE에 대해 흐림 효과를 사용한다고 생각했는데, 그 문제로 보였다. –

+0

@Uriel focusout과 blur는 두 가지 다른 이벤트 유형입니다 (둘 다 [DOM 3 Events spec] (http://www.w3.org/TR/DOM-Level-3-Events/)에 정의되어 있음). jQuery는 이들을 함께 사용하지 않습니다. –

0

는 이 솔루션은 내가 두 번 이벤트를 잡을 것을 제외하고 완벽하게 작동합니다. 내가 다른 응용 프로그램으로 전환 할 때 내가 다른 브라 우어 탭을 클릭하거나

BLUR 이벤트는 발생합니다.

관련 문제