您的位置:首页 > 其它

始终保持打开同一个子窗口以及关闭父窗口同时自动关闭所有子窗口

2007-06-08 02:28 316 查看
需求如题,

原始需求来自今天CSDN asp.net 板块的一个求助贴:

1.点击一个可以打开新窗体的链接,如何实现如果窗体已打开,则将焦点转到已打开的窗体,否则打开新窗体。难点:如何判断窗体已打开,及将将打开的窗体Active?

2.如何实现一个主窗体关闭时,将所有 打开的其他相关窗体一起关闭?

我们主管以前是做WinForm的,现在升级系统Asp.net做开发。但思维模式还是WinForm。提的这两个要求实难下手去做,请教各位是否有办法实现,若有请告之,谢谢!
http://community.csdn.net/Expert/topic/5587/5587936.xml?temp=.7338983 虽然是有点变态,还硬是将他基本实现了,希望不会有太多潜在bug~

其实自己很早都有这种需求,只是之前都懒得去尝试,变样实现了,
至于父子窗口交互控制、互相调用方法、互相传值,地球人倒是实现了不少,

google + baidu 好像都没有完整的实例可供参考,只有自己实现

这里,我采取了 window.open ,还没有尝试 window.showModelessDialog,
对于 IE,来说后者可能更适合,更好交互控制

实现要点
1. window.open 会返回新打开窗口的 window 对象
2. 实现一个模拟的简单 HashMap 存储子窗口的 window 对象
3. 每次 open 的时候,检索此 HashMap,确定子窗口是否已存在,
4. 若存在则直接切换焦点 (window.focus)
5. 若不存在,则 open 一个
6. 对于4,有可能子窗口已关闭,故采取了点技巧,先调用其 focus (其实可以任意方法),若出错,则也open 一个
7. 关闭 parent 的时候,遍历 HashMap,尝试关闭所有子窗口
8. 所有操作在父窗口实现
9. 整个实现原理其实很简单,只要需要熟悉js和dhtml,然后注意细节问题处理

目前 IE 6 sp1 测试通过,FF 由于不支持 window.focus 故不适合使用

对于 FF window.focus 问题参考:
http://hi.baidu.com/aolaii/blog/item/1bce87d6d9a1f62f06088b41.html
http://groups.google.com/group/mozilla.support.firefox/browse_thread/thread/470462a7876dd154/eae3d04ce24aa58e?lnk=st&q=focus+firefox+raise&rnum=1#eae3d04ce24aa58e

现在有点崇拜那句话了,"nothing is impossible!",当然前提是要合理的^_^

欢迎拍砖~

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Parent window</title>
</head>
<body>
<h3>Maintaining the Parent window and Multi Child windows as in WinForm</h3>
<h4>funcions:</h4>
<ol>
<li>Open the same child window once.</li>
<li>Close all the child windows when the parent window is closing.</li>
</ol>
Child window:
<select id="sltWins">
<option selected="selected" value="c1.htm">#1</option>
<option value="c2.htm">#2</option>
</select>
<br />
<input id="btnOpen" type="button" value="Open the selected window" onclick="openWin()" />

</body>
</html>

下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐