我需要实现如下效果:
在一个主窗口用window.open()打开一个子窗口,焦点转到子窗口,然后在子窗口中响应键盘事件执行一些操作,
操作完成之后,焦点返回主窗口。
现在需要在子窗口执行操作时,把焦点锁定在子窗口,以便在子窗口在处理键盘操作,就算是用户用鼠标选中主窗口,焦点也要立即跳回子窗口中,直到操作结束才能让焦点回到主窗口。
我的做法是在子窗口的blur事件中把焦点重新设置到子窗口中,(用了jquery)如下: //lock focus
$(document).bind('blur',function(){
window.focus();
});事件有响应到,可是没有达到预期效果,焦点没有锁定在子窗口中,上面的代码有问题吗?
或者哪位有其它的实现方法请指教下。谢谢!
在一个主窗口用window.open()打开一个子窗口,焦点转到子窗口,然后在子窗口中响应键盘事件执行一些操作,
操作完成之后,焦点返回主窗口。
现在需要在子窗口执行操作时,把焦点锁定在子窗口,以便在子窗口在处理键盘操作,就算是用户用鼠标选中主窗口,焦点也要立即跳回子窗口中,直到操作结束才能让焦点回到主窗口。
我的做法是在子窗口的blur事件中把焦点重新设置到子窗口中,(用了jquery)如下: //lock focus
$(document).bind('blur',function(){
window.focus();
});事件有响应到,可是没有达到预期效果,焦点没有锁定在子窗口中,上面的代码有问题吗?
或者哪位有其它的实现方法请指教下。谢谢!
window.onblur = function ()
{
setTimeout(function(){window.focus();},10);
};
在ie和ff下都能达到效果了,可是如果换成下面的jquery代码:
$(document).ready(function(){
$(document).bind("blur",function(){
setTimeout(function(){window.focus();},10);
});
});
为什么在ie下没效果呢?
02.<head>
03.<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
04.<title>无标题文档</title>
05.<script language="javascript">
06.
07. window.onfocus = function focus(){//重写父窗口window对象中的onfocus,使其在获得焦点时执行以下代码
08. if( typeof(window.childWindow)!="undefined"){//如果子窗口存在,将焦点转到子窗口
09. window.childWindow.focus();
10. }
11. }
12. function showChild(){
13.
14.//打开一个子窗口,并将子窗口的引用保存在父窗口window的childWindow属性中
15. var height=30;
16. var width=220;
17. var left, top;
18. left = (window.screen.availWidth - width) / 2; //使得对话框处于屏幕的正中间
19. top = (window.screen.availHeight - height) / 2;
20. var pos = 'width=' + width + ',height=' + height + ',left=' + left + ',top=' + top + ',screenX=' + left + ',screenY=' + top;
21.
22. window.childWindow = window.open ("child.html", "newwindow",pos,"toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no");
23. }
24.</script>
25.</head>
26.
27.<body>
28.<input name="btn_show" type="button" value="显示子窗口" onclick="showChild()" />
29.<input name="btn_alert" type="button" value="显示其他" onclick="alert('被调用了')" />
30.</body>
31.</html> 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/java_pengjin/archive/2010/12/03/6052113.aspx
也就是子窗口在调用父窗口的一个方法,来重写父窗口的onfous事件,使焦点不在锁定到子窗口。
这样来来回回的调,是不是有点烦琐了?
考虑兼容的话,用层和遮罩就好了。楼主说的遮罩后别的还会获得焦点,应该是哪里没搞好。贴下代码吧。
setTimeout(function(){window.focus();},10);
});
在网上查到一段,用上面这段代码搞定了。虽然说有点不安全,但在ie和ff下基本运行正常了。
子窗口程序处理完后,在unbind这个事件,焦点就可以自由切了。
不过这个延时执行是为什么呢?