如何将焦点带到jquery的窗口?

时间:2009-03-25 21:37:29

标签: javascript jquery

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

在$(文件)里面。我准备好了这些事件:

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

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

function FocusInput(){

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

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

更新

总面孔时刻: 在FireFox中: *工具 *选项...... *内容选项卡 *“启用JavaScript”旁边的高级按钮 *选中名为“提升或降低Windows”的框

5 个答案:

答案 0 :(得分:3)

总面孔时刻:在FireFox中:

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

默认情况下,此功能处于关闭状态,必须启用。而且,我认为,由于它在Chrome中不起作用,Safari会是相同的,但你知道他们所说的“假设”(它适用于Safari,但不适用于Chrome)。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

你是完全正确的。在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

答案 3 :(得分:1)

好像你不应该知道什么时候你的窗户模糊了。当您的数据更新时,您的窗口要么没有聚焦,在这种情况下您想要聚焦它,或者它已经聚焦,并且再次聚焦它不会对您造成伤害。

答案 4 :(得分:0)

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

我会使用普通的旧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();
    }