JQuery $ (окно) .focusout проблема - PullRequest
4 голосов
/ 28 февраля 2011

проблема в том, что я делаю такую ​​программу, как чат, которая должна знать, покинул ли пользователь окно или переключился на другое окно или вкладку, чтобы другие пользователи могли видеть, что другой пользователь не видитстраницу прямо сейчас.

Я думал, что фокусировка оконного события решит мои проблемы, однако есть несколько проблем с ним.Во-первых: он не срабатывает только тогда, когда пользователь покидает окно, если он фокусируется на поле ввода, а затем щелкает в любом месте на странице, происходит событие.Очевидно, это невыносимо.В Firefox мне удалось обойти это.В Firefox, когда это происходит, браузер запускает событие focusout один раз.Однако если вы действительно выходите из окна, оно запускается дважды.Итак, небольшое программирование сотворило магию.

Затем возникла вторая проблема: Chrome, и я полагаю, что другой браузер может вести себя так же, только вызывает событие focusout один раз, независимо от того, что вы делаете.Выход из окна, смена фокуса со входов на страницу, это то же самое, поэтому мое программирование там не сработало.

Кто-нибудь знает способ имитации желаемого поведения?Или способ заставить Chrome и другие возможные браузеры вести себя как Firefox или что-то еще?

Спасибо всем!

Ответы [ 3 ]

8 голосов
/ 28 февраля 2011

Используйте blur вместо focusout:

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

Разница в том, что focusout всплывает в DOM-дереве, а blur - нет.Если вы установите focusout для объекта окна, то все события размытия, которые происходят в элементах страницы, также будут запускать этот обработчик, который вам не нужен.

Разница в том, что focusout (при установке в объекте окна) фиксирует все события размытия, которые возникают на странице (в любом элементе).В отличие от этого blur (при установке на объекте окна) не фиксирует эти события размытия.

Демонстрация в реальном времени: http://jsfiddle.net/simevidas/taRG6/

1 голос
/ 28 февраля 2011

Это отвечает на это?Рассказывает об использовании события размытия

JavaScript / jQuery: проверить, имеет ли окно фокус

0 голосов
/ 13 апреля 2012

Я отвечаю на вопрос, это решение отлично работает, за исключением того, что я ловлю событие дважды.

BLUR событие в окне вызывается только при нажатии на другую вкладку браузера или при переключении на другое приложение.

...