2011-02-28 108 views
3

問題是,我正在製作一個聊天程序,需要知道用戶是否已離開窗口,或者更改爲其他窗口或選項卡,以允許其他用戶看到其他用戶現在沒有看到該頁面。

我認爲窗口事件聚焦將解決我的問題,但是,它有幾個問題。 第一個: 它不會在用戶離開窗口時觸發,如果他們關注輸入字段,然後單擊頁面中的任何其他位置,事件將觸發。顯然這是不能容忍的。 我在Firefox中管理一個方法。在Firefox上,當發生這種情況時,瀏覽器會觸發一次聚焦事件。如果你真的離開了窗戶,那麼它會發射兩次。所以,一個小編程使得這個魔法成爲可能

然後出現第二個問題:Chrome,我相信其他瀏覽器可能會表現相同,無論您做什麼,只會觸發一次focusout事件。離開窗口,把焦點從輸入變成頁面,這是一樣的,所以,我的編程在那裏沒有效果。

有沒有人知道一種方法來模擬所需的行爲?或者讓Chrome和其他可能的瀏覽器像Firefox或其他類似的行爲一樣?

謝謝大家!

+0

我不認爲你想要做的事實際上可以用今天的瀏覽器。 – Pointy 2011-02-28 14:52:51

+0

你試過'$(document).bind(「mouseleave」,function(){...})嗎? – Mottie 2011-02-28 14:56:59

+0

@Pointy'window.onblur'處理程序工作得很好。只要用戶切換到另一個選項卡,blur事件就會觸發窗口對象。 – 2011-02-28 15:09:43

回答

7

使用blur會談:

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

不同的是,focusout冒泡DOM樹,blur沒有。如果在窗口對象上設置了focusout,則頁面元素上發生的所有模糊事件也會觸發該處理程序,這是您不需要的。

區別在於focusout(在窗口對象上設置時)會捕獲在頁面上觸發的所有模糊事件(在任何元素處)。相反,blur(在窗口對象上設置時)不會捕獲這些模糊事件。

現場演示:http://jsfiddle.net/simevidas/taRG6/

+0

謝謝!這真的解決了我的問題! – 2011-02-28 15:11:31

+0

我以爲jQuery已經在Firefox和Chrome中使用了blur,並且專注於IE,這似乎是一個問題。 – 2011-02-28 15:13:31

+0

@Uriel專注和模糊是兩種不同的事件類型(都在[DOM 3 Events spec](http://www.w3.org/TR/DOM-Level-3-Events/)中定義)。 jQuery不會將它們混合在一起。 – 2011-02-28 15:29:38

0

我回答這個問題, 該解決方案完美的作品,只是我趕上事件的兩倍。當我點擊另一個布勞爾選項卡或當我切換到另一個應用程序

BLUR事件上窗口僅觸發。