【问题标题】:How to bring focus to a window in jquery?如何将焦点放在jquery中的窗口上?
【发布时间】:2010-10-15 13:50:51
【问题描述】:

我正在尝试使用 jquery 将焦点放在窗口上。该窗口是通过单击父页面上的按钮启动的。我在子窗口中进行了一些 ajax 调用,因此正在更新数据。我的问题是,如果用户单击父窗口并将子窗口隐藏在其后面,如果有数据更新,我想将该子窗口带回到最前面。

在 $(document).ready 中,我连接了这些事件:

  $(window).blur(function(){
    WindowHasFocus =false;
}).focus(function(){
    WindowHasFocus =true;
});

然后,如果数据更新,我调用这个函数:

function FocusInput(){

 if(!WindowHasFocus){
    $(window).focus();
 }
}

这在 IE8 中按预期工作,但在 FireFox(和所有其他浏览器)中,如果我单击父窗口,Blur 事件似乎永远不会触发。关于如何实现这一目标的任何建议/想法?

更新:

总的掌心时刻: 在火狐中: * 工具 * 选项… * 内容选项卡 * “启用 JavaScript”旁边的高级按钮 * 选中名为“升起或降下窗户”的复选框

【问题讨论】:

  • 将您的答案放在单独的答案中,以便我们对其进行投票并将问题从未回答列表中删除。

标签: javascript jquery


【解决方案1】:

总的掌心时刻:在 FireFox 中:

  • 工具
  • 选项...
  • 内容标签
  • “启用 JavaScript”旁边的高级按钮
  • 选中名为“升高或降低窗户”的框

这是默认关闭的,必须启用。而且,我认为既然它在 Chrome 中不起作用,那么 Safari 也是一样的,但你知道他们所说的“假设”(它适用于 Safari,但不适用于 Chrome)。

【讨论】:

    【解决方案2】:

    如果没有充分的理由拥有两个单独的窗口,那么最好使用“模态框”,那里有很多示例和 jquery 插件来实现这一点。这种插件的一个例子: http://www.84bytes.com/2008/06/02/jquery-modal-dialog-boxes/

    【讨论】:

    • 不能使用模式,它必须是一个单独的窗口。
    • 在这种情况下尝试从父窗口调用焦点: url='someUrl' newWin=window.open(url,"helpWin","features"); ... newWin.window.focus()
    • 一个重要的原因是安全性:父窗口可能是常规的http 并且需要打开一个https 的窗口。
    【解决方案3】:

    你完全正确。在 FF 中,似乎它确实触发了事件,但与此同时,它似乎没有将元素注册为焦点。因此,模糊事件永远不会被触发。不确定我是否正确地解释了这一点......下面的代码说明了一切。

    在本例中,框默认隐藏,但通过焦点事件侦听器显示。在 IE 8 中,如果您单击主窗口,它仍然会触发模糊,但在 FF 中不会:

    <html>
    <head>
    
    </head>
    <body>
        <div id="hiddenWin" style="width: 100px; height: 100px; background-color: Black; display: none;"></div>
    
        <script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
        <script type="text/javascript">
            var something = 12;
            something += 4; 
    
            $(document).ready(function()        
                {
    
                    $("#hiddenWin").focus(function()
                        {
                            $(this).show();
                        }
                    ).blur(function()
                        {
                            $(this).hide();
                        }               
                    )               
    
                    $("#hiddenWin").focus();
                }
            );
        </script>
    
    </body>
    </html>
    

    根据您的需要,设置叠加背景是否可行?固定位置 @ top:0 和 left:0 的东西占据了整个屏幕,并且 z-index 小于您的弹出窗口。这样,当他们单击覆盖时,它会窃取焦点,然后您可以隐藏所有内容...? IDK,只是一个建议。我会继续胡闹,看看我能不能弄明白。好问题。 +1

    【讨论】:

    • 不,这个想法是让人们浏览网站,只有在有数据更新时才将子窗口放在前面。
    • 找到了...我是个白痴:在 FireFox 中:* 工具 * 选项... * 内容选项卡 * “启用 JavaScript”旁边的高级按钮 * 选中名为“升高或降低 Windows”的框跨度>
    【解决方案4】:

    您似乎不想知道您的窗口何时变得模糊。当您的数据更新时,您的窗口要么不在焦点上,在这种情况下你想聚焦它,要么它已经在焦点上,再次聚焦它不会对你造成任何伤害。

    【讨论】:

    • 嗯,原因是子窗口有一个文本输入,我不希望焦点从那里移开。但无论如何,$(window).focus() 在 FF 中似乎没有做任何事情。
    • 你试过在没有 jquery 调用的情况下只做window.focus() 吗?
    【解决方案5】:

    是的,模态的东西可能是要走的路,但有时你只需要按照你想要的方式去做。

    我会使用普通的旧 JavaScript。命名窗口并使其成为焦点。

        function showImageWindow(imageURL)
        {
            var imageWindow = window.open(imageURL,"My_Window","width=1000px,height=1000px,menubar=0,titlebar=0,toolbar=0,location=0,scrollbars=0,status=0"); 
            imageWindow.focus();
        }
    

    【讨论】:

      猜你喜欢
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多