Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery$(窗口).focusout问题_Javascript_Jquery_Focus_Jquery Events - Fatal编程技术网

Javascript JQuery$(窗口).focusout问题

Javascript JQuery$(窗口).focusout问题,javascript,jquery,focus,jquery-events,Javascript,Jquery,Focus,Jquery Events,问题是,我正在制作一个类似聊天的程序,它需要知道用户是否离开了该窗口,或者是否更改为另一个窗口或选项卡,以允许其他用户看到其他用户现在没有看到该页面 我认为窗口事件focusout可以解决我的问题,但是,它有一些问题 第一: 它不仅在用户离开窗口时触发,如果他们关注一个输入字段,然后单击页面中的任何其他位置,则会触发事件。显然,这是不能容忍的 我在Firefox中设法解决了这个问题。在Firefox上,当这种情况发生时,浏览器会触发一次focusout事件。然而,如果你真的离开了窗户,它会点燃两

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

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

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

我在Firefox中设法解决了这个问题。在Firefox上,当这种情况发生时,浏览器会触发一次
focusout
事件。然而,如果你真的离开了窗户,它会点燃两次。所以,一个小小的程序创造了奇迹

然后是第二个问题:
Chrome浏览器,我相信其他浏览器可能也有同样的行为,不管你做什么,只会触发一次
focusout
事件。离开窗口,将焦点从输入切换到页面,结果是一样的,因此,我的编程在那里不起作用


有人知道模拟所需行为的方法吗?还是一种让Chrome和其他可能的浏览器表现得像Firefox之类的方式?

这能回答这个问题吗?关于使用模糊事件的讨论


使用
blur
而不是
focusout

$(window).blur(function() {
    // code
});
不同之处在于,
focusout
使DOM树冒泡,而
blur
则不会。如果在窗口对象上设置
focusout
,则页面元素上发生的所有模糊事件也将触发该处理程序,这是您不希望看到的

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

现场演示:我回答问题, 这个解决方案非常有效,只是我捕捉到了两次事件


BLUR只有在我单击另一个浏览器选项卡或切换到另一个应用程序时,才会触发窗口上的事件。

我认为,在今天的浏览器中,您想做的事情实际上是不可能的。您是否尝试过
$(document).bind(“mouseleave”,function(){…})
?@Pointy
窗口。onblur
处理程序工作正常。每当用户切换到另一个选项卡时,窗口对象就会触发模糊事件。@Šime Vid我也遇到过问题,但那是很久以前的事了,我最近没有尝试过。如果它能工作,那么这至少对OP来说是个好消息:-)是的,这和Šime sad一样有效。我认为jQuery已经在Firefox、Chrome和focusout表单IE中使用了blur,这似乎是一个问题。@Uriel focusout和blur是两种不同的事件类型(都在中定义)。jQuery不会将它们混合在一起。您是如何解决的?