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/

相关文章:

jquery - 如何淡化更改背景图像

html - 是否可以让 :after pseudo element get focus when press tab

jquery加载部分页面,通过变量ID选择

jquery - 从更改时的选择中获取值(value)

jQuery - 将导航焦点拉到页面加载时的特定链接

javascript - 选择当前聚焦的元素

javascript - 在 URL 中传递 base64 信息作为查询字符串的正确方法?

javascript - 澄清JavaScript原型(prototype)的术语和机制

javascript - 使用javascript计算圆的半径

循环插件中的javascript 'short hand'符号