【问题标题】:JQuery $(window).focusout issueJQuery $(window).focusout 问题
【发布时间】:2011-07-05 20:01:14
【问题描述】:

问题是,我正在制作一个类似于聊天的程序,它需要知道用户是否离开了窗口,或者更改到另一个窗口或选项卡,以允许其他用户看到其他用户没有看到页面。

我认为窗口事件focusout 可以解决我的问题,但是,它存在一些问题。

第一:
它不会仅在用户离开窗口时触发,如果他们专注于输入字段然后单击页面中的其他任何位置,事件就会触发。这显然是不能容忍的。

我在 Firefox 中设法解决了这个问题。在 Firefox 上,当这种情况发生时,浏览器会触发一次 focusout 事件。但是,如果您真的离开窗口,它会触发两次。所以,一点点编程就变了。

然后是第二个问题:
Chrome,我相信其他浏览器的行为可能相同,无论您做什么,都只会触发一次 focusout 事件。离开窗口,将焦点从输入更改为页面,都是一样的,所以我的编程在那里不起作用。

有谁知道模拟所需行为的方法?或者让 Chrome 和其他可能的浏览器表现得像 Firefox 或其他什么的方法?

【问题讨论】:

  • 我不认为你想做的事在今天的浏览器上是可行的。
  • 你试过$(document).bind("mouseleave", function(){...})吗?
  • @Pointy window.onblur 处理程序工作得很好。每当用户切换到另一个选项卡时,都会在窗口对象上触发 blur 事件。
  • @Šime Vidas 好吧,我遇到了问题,但那是前一段时间了,我最近没有尝试过。如果它有效,那么这至少对 OP 来说是个好消息:-)
  • 是的,这和 Šime 一样可悲。

标签: javascript jquery focus jquery-events


【解决方案1】:

使用blur 代替focusout

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

不同之处在于 focusout 会在 DOM 树中冒泡,而 blur 不会。如果您在窗口对象上设置focusout,那么页面元素上发生的所有模糊事件也会触发您不想要的处理程序。

不同之处在于focusout(在窗口对象上设置时)捕获在页面上(在任何元素处)触发的所有模糊事件。相比之下,blur(在窗口对象上设置时)不会捕获那些模糊事件。

现场演示: http://jsfiddle.net/simevidas/taRG6/

【讨论】:

  • 我认为 jQuery 已经在 Firefox 和 Chrome 中使用了 blur 和 focusout form IE,这似乎是个问题。
  • @Uriel focusout 和 blur 是两种不同的事件类型(均在DOM 3 Events spec 中定义)。 jQuery 不会将它们混合在一起。
【解决方案2】:

这能回答吗?浅谈使用模糊事件

JavaScript / jQuery: Test if window has focus

【讨论】:

    【解决方案3】:

    我回答这个问题, 除了我两次捕获事件之外,此解决方案效果很好。

    window 上的BLUR 事件仅在我单击另一个浏览器选项卡或切换到另一个应用程序时触发。

    【讨论】:

      猜你喜欢
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 2011-11-21
      相关资源
      最近更新 更多