Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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中将焦点转移到窗口?_Javascript_Jquery - Fatal编程技术网

Javascript 如何在jquery中将焦点转移到窗口?

Javascript 如何在jquery中将焦点转移到窗口?,javascript,jquery,Javascript,Jquery,我正在尝试使用jquery将焦点转移到窗口。通过点击父页面上的按钮,弹出窗口。我在子窗口中进行了一些ajax调用,因此数据正在更新。我的问题是,如果用户单击父窗口并将子窗口隐藏在其后面,如果有数据更新,我希望将该子窗口带回到最前面 在$(文档)内。准备好了吗?我连接这些事件: $(window).blur(function(){ WindowHasFocus =false; }).focus(function(){ WindowHasFocus =true; }); 然后,

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

在$(文档)内。准备好了吗?我连接这些事件:

  $(window).blur(function(){
    WindowHasFocus =false;
}).focus(function(){
    WindowHasFocus =true;
});
然后,如果数据更新,我调用此函数:

function FocusInput(){

 if(!WindowHasFocus){
    $(window).focus();
 }
}
这与IE8中的预期一样有效,但在FireFox(和所有其他浏览器)中,如果单击父窗口,模糊事件似乎不会触发。对如何实现这一目标有何建议/想法

更新:

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

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

如果没有足够的理由使用两个单独的窗口,那么最好使用“模式框”,有很多例子和jquery插件可以实现这一点。此类插件的一个示例:
你完全正确。在FF中,它似乎确实触发了事件,但同时,它似乎没有将元素注册为焦点。因此,无法触发模糊事件。我甚至不确定我解释的是否正确。。。下面的代码说明了这一切

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


var=12;
某物+=4;
$(文档).ready(函数()
{
$(“#hiddenWin”).focus(函数()
{
$(this.show();
}
).blur(函数()
{
$(this.hide();
}               
)               
$(“#hiddenWin”).focus();
}
);

根据您的需要,设置覆盖背景是否可行?它是一个固定的位置@top:0和left:0,占据了整个屏幕,其z索引小于弹出窗口。这样,当他们点击覆盖,它将窃取焦点,然后你可以隐藏一切。。。?IDK,只是一个建议。我会继续胡闹,看看能不能弄明白。好问题+1

FireFox中的facepalm总瞬间:

  • 工具
  • 选项
  • 内容选项卡
  • “启用JavaScript”旁边的高级按钮
  • 选中名为“升起或降下车窗”的框

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

是的,模式可能是一种方式,但有时你只需要按照你想要的方式来做

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

好的,原因是子窗口有一个文本输入,我不希望焦点被从中移除。但是在任何情况下,$(window).focus()在FF中似乎没有任何作用。您是否尝试过在没有jquery调用的情况下执行
window.focus()
?无法使用模式,它必须是一个单独的窗口。在这种情况下,请尝试从父窗口调用焦点:url='someUrl'newWin=window.open(url,“helpWin”,“features”)。。。newWin.window.focus()一个重要原因是安全性:父窗口可能是常规的
http
,需要打开一个
https
窗口。否,这样做的目的是让用户浏览网站,并且只有在数据更新时才将子窗口放在最前面。找到它…我是个白痴:在FireFox中:*工具*选项…*内容选项卡*启用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();
    }