我正在尝试使用jquery将焦点带到窗口。通过父页面上的按钮单击弹出窗口。我在子窗口中进行了一些ajax调用,因此数据正在更新。我的问题是,如果用户点击父窗口并隐藏其后面的子项,我想在有数据更新的情况下将该子窗口恢复到最前面。
在$(文件)里面。我准备好了这些事件:
$(window).blur(function(){
WindowHasFocus =false;
}).focus(function(){
WindowHasFocus =true;
});
然后,如果数据更新,我调用此函数:
function FocusInput(){
if(!WindowHasFocus){
$(window).focus();
}
}
这在IE8中按预期工作,但在FireFox(以及所有其他浏览器)中,如果单击父窗口,Blur事件似乎会触发。关于如何实现这一点的任何建议/想法?
更新
总面孔时刻: 在FireFox中: *工具 *选项...... *内容选项卡 *“启用JavaScript”旁边的高级按钮 *选中名为“提升或降低Windows”的框
答案 0 :(得分:3)
总面孔时刻:在FireFox中:
默认情况下,此功能处于关闭状态,必须启用。而且,我认为,由于它在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();
}