posts - 495,comments - 227,trackbacks - 0
          ?? 在b\s系統中,用戶經常需要打開子窗口選中某些項目,并將這些項目插入到父窗口的下拉選框中。本來以為在IE中實現這樣子窗口操作父窗口的功能十分簡單,但是按常規的做法卻是行不通的。在google上搜索了一陣也沒有好的解決方案。最后看到國外的一個網頁上有以下內容:

          Explorer 5.0 problems

          When it comes to dynamically generating options and selects, Explorer 5.0 on Windows has quite a few problems:

          1. Generating options in another frame or window doesn't work. Put the script in the page that contains the select. I have heard, but did not test, that this problem still exists in Explorer 6.0
          2. Generating selects and options through the 'pure' W3C DOM (ie. with any document.createElement()) crashes Explorer 5.0 . Solved in 5.5
            Generate these selects and options through innerHTML instead.
          3. Generating options from a popup window may crash any Explorer Windows.

          I have heard, but did not test, that the script below works fine in IE 5.0:

          var?doc?=?select.ownerDocument;
          if?(!doc)
          ????doc?
          =?select.document;
          var?opt?=?doc.createElement('OPTION');
          opt.value?
          =?value;
          opt.text?
          =?text;
          select.options.add(opt,?index);

          ??? 最后得到了啟發,從而實現了這個功能,下面所有可能用到的實現方法的代碼。但是在這些代碼中有些方法是不可行的。最后有一個表格說明了哪些方法不可行,理由是什么?

          HTMLPage.htm

          <!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>1st</title>
          ????
          <script?language="javascript">
          ????
          function?AddOpt(text,val)
          ????
          {
          ????????
          var?slct?=?document.getElementById("Select1");
          ????????
          var?op?=?new?Option(text,val);
          ????????slct.add(op);
          ????}

          ????
          </script>
          </head>
          <body>
          <form?id="form1"?name="form1">
          ????
          <select?id="Select1"?multiple="multiple">
          ????????
          <option?selected="selected"?value="1">1</option>
          ????????
          <option?value="2">2</option>
          ????????
          <option?value="3">3</option>
          ????????
          <option?value="4">4</option>
          ????
          </select>
          ????
          <br?/>
          ????
          <input?id="showModalDialogWithoutArg"?type="button"?value="showModalDialogWithoutArg"?onclick="window.showModalDialog('HTMLPage2.htm');"/>
          ????
          <br?/>
          ????
          <input?id="showModalDialogWithArg"?type="button"?value="showModalDialogWithArg"?onclick="window.showModalDialog('HTMLPage2.htm',?window);"/>
          ????
          <br?/>
          ????
          <input?id="showModelessDialogWithoutArg"?type="button"?value="showModelessDialogWithoutArg"?onclick="window.showModelessDialog('HTMLPage2.htm');"/>
          ????
          <br?/>
          ????
          <input?id="showModelessDialogWithArg"?type="button"?value="showModalDialogWithArg"?onclick="window.showModelessDialog('HTMLPage2.htm',?window);"/>
          ????
          <br?/>
          ????
          <input?id="open"?type="button"?value="open"?onclick="window.open('HTMLPage2.htm');"/>
          </form>
          </body>
          </html>

          ?HTMLPage2.htm

          <!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>2nd</title>
          ????
          <script?language="javascript">
          ????
          function?InsertToParent()
          ????
          {
          ????????
          var?slct?=?window.parent.document.getElementById("Select1");
          ????????
          ????????doc?
          =?slct.ownerDocument;
          ????????
          var?opt?=?doc.createElement('OPTION');
          ????????opt.value?
          =?"2nd?窗口";
          ????????opt.text?
          =?"2nd?窗口";
          ????????slct.options.add(opt);
          ????}

          ????
          ????
          function?InsertToOpener()
          ????
          {
          ????????
          var?slct?=?window.opener.document.getElementById("Select1");
          ????????
          ????????doc?
          =?slct.ownerDocument;
          ????????
          var?opt?=?doc.createElement('OPTION');
          ????????opt.value?
          =?"2nd?窗口";
          ????????opt.text?
          =?"2nd?窗口";
          ????????slct.options.add(opt);
          ????}

          ????
          ????
          function?InsertToTop()
          ????
          {
          ????????
          var?slct?=?window.top.document.getElementById("Select1");
          ????????
          ????????doc?
          =?slct.ownerDocument;
          ????????
          var?opt?=?doc.createElement('OPTION');
          ????????opt.value?
          =?"2nd?窗口";
          ????????opt.text?
          =?"2nd?窗口";
          ????????slct.options.add(opt);
          ????}

          ????
          ????
          function?InsertByParentFun()
          ????
          {
          ????????
          var?wnd?=?window.parent;
          ????????wnd.AddOpt(
          "2nd?窗口","2nd?窗口");
          ????}

          ????
          ????
          function?InsertByOpenerFun()
          ????
          {
          ????????
          var?wnd?=?window.opener;
          ????????wnd.AddOpt(
          "2nd?窗口","2nd?窗口");
          ????}

          ????
          ????
          function?InsertByTopFun()
          ????
          {???????
          ????????
          var?wnd?=?window.top;
          ????????wnd.AddOpt(
          "2nd?窗口","2nd?窗口");
          ????}

          ????
          ????
          function?InsertByArgFun()
          ????
          {
          ????????
          var?wnd?=?window.dialogArguments;
          ????????wnd.AddOpt(
          "2nd?窗口","2nd?窗口");
          ????}

          ????
          ????
          function?InsertWithArg()
          ????
          {
          ????????
          var?wnd?=?window.dialogArguments;
          ????????
          var?doc?=?wnd.document;
          ????????
          var?slct?=?doc.getElementById("Select1");
          ????????
          ????????doc?
          =?slct.ownerDocument;
          ????????
          var?opt?=?doc.createElement('OPTION');
          ????????opt.value?
          =?"2nd?窗口";
          ????????opt.text?
          =?"2nd?窗口";
          ????????slct.options.add(opt);
          ????}

          ????
          </script>
          </head>
          <body>
          ????
          <input?id="InsertToParent"?type="button"?value="InsertToParent"?onclick="InsertToParent()"?/>
          ????
          <br?/>
          ????
          <input?id="InsertToOpener"?type="button"?value="InsertToOpener"?onclick="InsertToOpener()"?/>
          ????
          <br?/>
          ????
          <input?id="InsertToTop"?type="button"?value="InsertToTop"?onclick="InsertToTop()"?/>
          ????
          <br?/>
          ????
          <input?id="InsertByParentFun"?type="button"?value="InsertByParentFun"?onclick="InsertByParentFun()"?/>
          ????
          <br?/>
          ????
          <input?id="InsertByOpenerFun"?type="button"?value="InsertByOpenerFun"?onclick="InsertByOpenerFun()"?/>
          ????
          <br?/>
          ????
          <input?id="InsertByTopFun"?type="button"?value="InsertByTopFun"?onclick="InsertByTopFun()"?/>
          ????
          <br?/>
          ????
          <input?id="InsertByArgFun"?type="button"?value="InsertByArgFun"?onclick="InsertByArgFun()"?/>
          ????
          <br?/>
          ????
          <input?id="InsertWithArg"?type="button"?value="InsertWithArg"?onclick="InsertWithArg()"?/>
          </body>
          </html>

          ?

          方法表格

          showModalDialogWithoutArg

          InsertToParent

          不能實現

          子窗口parent屬性為子窗口自身

          InsertToOpener

          不能實現

          子窗口opener屬性為空

          InsertToTop

          不能實現

          子窗口top屬性為子窗口自身

          InsertByParentFun

          不能實現

          子窗口parent屬性為子窗口自身

          InsertByOpenerFun

          不能實現

          子窗口opener屬性為空

          InsertByTopFun

          不能實現

          子窗口top屬性為子窗口自身

          InsertByArgFun

          不能實現

          沒有傳送參數給子窗口

          InsertWithArg

          不能實現

          沒有傳送參數給子窗口

          showModalDialogWithArg

          InsertToParent

          不能實現

          子窗口parent屬性為子窗口自身

          InsertToOpener

          不能實現

          子窗口opener屬性為空

          InsertToTop

          不能實現

          子窗口top屬性為子窗口自身

          InsertByParentFun

          不能實現

          子窗口parent屬性為子窗口自身

          InsertByOpenerFun

          不能實現

          子窗口opener屬性為空

          InsertByTopFun

          不能實現

          子窗口top屬性為子窗口自身

          InsertByArgFun

          可以實現

          ?

          InsertWithArg

          可以實現

          ?

          showModelessDialogWithoutArg

          InsertToParent

          不能實現

          子窗口parent屬性為子窗口自身

          InsertToOpener

          不能實現

          子窗口opener屬性為空

          InsertToTop

          不能實現

          子窗口top屬性為子窗口自身

          InsertByParentFun

          不能實現

          子窗口parent屬性為子窗口自身

          InsertByOpenerFun

          不能實現

          子窗口opener屬性為空

          InsertByTopFun

          不能實現

          子窗口top屬性為子窗口自身

          InsertByArgFun

          不能實現

          沒有傳送參數給子窗口

          InsertWithArg

          不能實現

          沒有傳送參數給子窗口

          showModelessDialogWithArg

          InsertToParent

          不能實現

          子窗口parent屬性為子窗口自身

          InsertToOpener

          不能實現

          子窗口opener屬性為空

          InsertToTop

          不能實現

          子窗口top屬性為子窗口自身

          InsertByParentFun

          不能實現

          子窗口parent屬性為子窗口自身

          InsertByOpenerFun

          不能實現

          子窗口opener屬性為空

          InsertByTopFun

          不能實現

          子窗口top屬性為子窗口自身

          InsertByArgFun

          可以實現

          ?

          InsertWithArg

          可以實現

          ?

          open

          InsertToParent

          不能實現

          子窗口parent屬性為子窗口自身

          InsertToOpener

          可以實現

          ?

          InsertToTop

          不能實現

          子窗口top屬性為子窗口自身

          InsertByParentFun

          不能實現

          子窗口parent屬性為子窗口自身

          InsertByOpenerFun

          可以實現

          ?

          InsertByTopFun

          不能實現

          子窗口top屬性為子窗口自身

          InsertByArgFun

          不能實現

          open方法不能在窗口間傳遞參數

          InsertWithArg

          不能實現

          open方法不能在窗口間傳遞參數



          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1089313

          posted on 2006-09-07 12:39 SIMONE 閱讀(620) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 芷江| 徐州市| 玉山县| 新巴尔虎左旗| 玛曲县| 巴楚县| 云南省| 福泉市| 柘荣县| 富宁县| 伊宁县| 甘南县| 洛阳市| 陇川县| 靖远县| 探索| 九江县| 岳西县| 上林县| 三台县| 万载县| 芜湖县| 屏边| 团风县| 西城区| 阿坝县| 永吉县| 霍城县| 黄山市| 图木舒克市| 永定县| 乌鲁木齐市| 高州市| 房山区| 郓城县| 西华县| 清水县| 景谷| 芮城县| 平阳县| 商河县|