javascript - JQuery $(window).focusout 问题

标签 javascript jquery focus jquery-events

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

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

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

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

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

有谁知道模拟所需行为的方法吗?或者让 Chrome 和其他可能的浏览器像 Firefox 或其他浏览器一样运行的方法?

最佳答案

使用blur代替focusout:

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

区别在于 focusout 使 DOM 树向上冒泡,而 blur 则没有。如果您在窗口对象上设置 focusout,那么页面元素上发生的所有模糊事件也会触发该处理程序,这是您不希望看到的。

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

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

关于javascript - JQuery $(window).focusout 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5143464/

相关文章:

javascript - Mapbox GL设置符号图层的不透明度

并发执行的 JavaScript 语句

使用原型(prototype)时的 Javascript 继承问题 - 实例被覆盖 :(

javascript - 使用幻灯片动画用下一个元素填充空间

javascript - 检测 jQuery "Live"事件的处理程序

javascript - for循环内的异步函数

javascript - jQuery:在克隆的 parent 中寻找克隆的 child ?

Java 的 setFocusableWindowState 和 setAccelerator 玩起来不好

android - 如何同时拥有 singleLine ="false"和 imeOptions ="actionNext"用于 EditText?

Android列表-列表标题中的编辑文本