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

我正在弹出窗口中加载文档,其中包含以下代码:

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

这些功能是临时的,仅供测试。我希望使用这些事件来设置一个指示窗口状态的标志。我正在做一个聊天应用程序,如果在最小化消息时收到消息,我将做一些引起注意的标题更改。但是,如果它们在窗口获得焦点时没有取消,它们将很烦人。

在上载时,我还把重点放在了文本区域上。 (不确定是否有任何区别。)

IE7(我没有方便的其他版本)似乎可以识别window.onblur,但不能识别window.onfocus。 Opera 10完全是奇怪的。

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

Safari 4:
  • 打开窗口:使用原始标题
  • 打开文档
  • 最小化:标题更改为“BLURRED”
  • 恢复:标题更改为“FOCUSED”

  • 这是我所期望的。

    Firefox 3.5:
  • 打开窗口:使用原始标题打开文档,然后更改为“FOCUSED”
  • 最小化:标题更改为“BLURRED”
  • 恢复:标题更改为“FOCUSED”

  • onfocus onload有点令人惊讶,但不是问题。

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

    onfocus发生了什么?

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

  • 有时...
  • 最小化:标题更改为“BLURRED”
  • 恢复:标题更改为“FOCUSED”

  • 有时...
  • 最小化:标题变为“BLURRED”,然后变为“FOCUSED”
  • 恢复:标题不变

  • 好吧,这简直太奇怪了...

    我对其他方法持开放态度,但我真的很想了解普通Java脚本在这里发生的情况-因此请不要给出jQuery答案,除非确实没有其他解决方法。

    谢谢!

    最佳答案

    onfocus和onblur在IE中的窗口对象上有问题。另一种方法是使用传播的onfocusin和onfocusout事件:

    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;
    

    我为您设置了一个示例here

    与聚焦和模糊不同,聚焦和聚焦是传播事件。他们会为页面中的元素触发并向上冒泡。如果您不想对页面上的所有元素都执行此事件,则需要检查event.srcElement或event.target。

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

    07-24 09:17