6

请注意,这与窗口上的焦点和模糊事件有关,而不是与表单字段有关。

我在弹出窗口中加载一个文档,它包含以下代码:

<script type="text/javascript">
window.onblur = function(){ document.title="BLURRED"; }
window.onfocus= function(){ document.title="FOCUSED"; }
</script>

这些功能是临时的,用于测试。我希望使用这些事件来设置一个指示窗口状态的标志;我正在做一个聊天应用程序,如果消息在最小化时出现,我会做一些引人注目的标题更改。但是,如果它们在窗口获得焦点时不取消,它们只会很烦人。

Onload,我也把焦点放在了一个textarea上。(不确定这是否有任何区别。)

IE7(我手边没有其他版本)似乎可以识别window.onblur但不识别window.onfocus. Opera 10 实在是太奇怪了。

这是我拥有的浏览器中发生的情况。我通过单击父级中的链接来启动弹出窗口,然后通过单击(Windows XP)任务栏上的弹出按钮来经历几个最小化恢复周期:

野生动物园 4:

  • 打开窗口:文档以原始标题打开
  • 最小化:标题更改为“模糊”
  • 恢复:标题更改为“FOCUSED”

这是我预期会发生的。

火狐 3.5:

  • 打开窗口:文档以原始标题打开,然后更改为“FOCUSED”
  • 最小化:标题更改为“模糊”
  • 恢复:标题更改为“FOCUSED”

onfocus onload 有点意外,但不是问题。

IE7:

  • 打开窗口:文档以原始标题打开
  • 最小化:标题更改为“模糊”
  • 恢复:无论我切换多少次,标题都不会改变

onfocus怎么了?

歌剧 10.5

  • 打开窗口:文档以原始标题打开,但在另一个选项卡中,不弹出

有时...

  • 最小化:标题更改为“模糊”
  • 恢复:标题更改为“FOCUSED”

有时...

  • 最小化:标题更改为“BLURRED”然后“FOCUSED”
  • 恢复:标题不变

好吧,这简直太奇怪了……

我对其他方法持开放态度,但我真的很想了解这里发生了什么,用普通的旧 Javascript - 所以请不要给出 jQuery 答案,除非真的没有其他方法解决这个问题。

4

1 回答 1

6

onfocusonblur在 IE 中的 window 对象上有问题。另一种方法是使用传播的onfocusinonfocusout事件:

function focusin() { document.title="BLURRED"; }
function focusout() { document.title="FOCUSED"; }

if ("onfocusin" in document)
    document.onfocusin = focusin,
    document.onfocusout = focusout;
else
    window.onblur = focousout,
    window.onfocus= focusin;

我在这里为你设置了一个例子。

focusinfocusoutfocusblur不同,是传播事件;它们会触发页面中的元素并向上冒泡。如果您不想对页面上的所有元素执行此事件,则需要检查event.srcElementevent.target 。

至于 Opera,“奇怪”是您可以使用的一个词。我机器上的版本不会为我触发窗口上的模糊或焦点事件。希望其他人可以为您提供解决方案。

于 2010-09-19T13:10:47.817 回答