怎么样在IE中实现窗口间操作下拉选框的选项?

怎么样在IE中实现窗口间操作下拉选框的选项?

在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:

怎么样在IE中实现窗口间操作下拉选框的选项?vardoc=select.ownerDocument;
怎么样在IE中实现窗口间操作下拉选框的选项?
if(!doc)
怎么样在IE中实现窗口间操作下拉选框的选项?doc
=select.document;
怎么样在IE中实现窗口间操作下拉选框的选项?
varopt=doc.createElement('OPTION');
怎么样在IE中实现窗口间操作下拉选框的选项?opt.value
=value;
怎么样在IE中实现窗口间操作下拉选框的选项?opt.text
=text;
怎么样在IE中实现窗口间操作下拉选框的选项?select.options.add(opt,index);
怎么样在IE中实现窗口间操作下拉选框的选项?

最后得到了启发,从而实现了这个功能,下面所有可能用到的实现方法的代码。但是在这些代码中有些方法是不可行的。最后有一个表格说明了哪些方法不可行,理由是什么?

HTMLPage.htm

怎么样在IE中实现窗口间操作下拉选框的选项?<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
怎么样在IE中实现窗口间操作下拉选框的选项?<htmlxmlns="http://www.w3.org/1999/xhtml">
怎么样在IE中实现窗口间操作下拉选框的选项?<head>
怎么样在IE中实现窗口间操作下拉选框的选项?<title>1st</title>
怎么样在IE中实现窗口间操作下拉选框的选项?怎么样在IE中实现窗口间操作下拉选框的选项?<scriptlanguage="javascript">
怎么样在IE中实现窗口间操作下拉选框的选项?functionAddOpt(text,val)
怎么样在IE中实现窗口间操作下拉选框的选项?怎么样在IE中实现窗口间操作下拉选框的选项?
{
怎么样在IE中实现窗口间操作下拉选框的选项?
varslct=document.getElementById("Select1");
怎么样在IE中实现窗口间操作下拉选框的选项?
varop=newOption(text,val);
怎么样在IE中实现窗口间操作下拉选框的选项?slct.add(op);
怎么样在IE中实现窗口间操作下拉选框的选项?}

怎么样在IE中实现窗口间操作下拉选框的选项?
</script>
怎么样在IE中实现窗口间操作下拉选框的选项?</head>
怎么样在IE中实现窗口间操作下拉选框的选项?<body>
怎么样在IE中实现窗口间操作下拉选框的选项?<formid="form1"name="form1">
怎么样在IE中实现窗口间操作下拉选框的选项?<selectid="Select1"multiple="multiple">
怎么样在IE中实现窗口间操作下拉选框的选项?<optionselected="selected"value="1">1</option>
怎么样在IE中实现窗口间操作下拉选框的选项?<optionvalue="2">2</option>
怎么样在IE中实现窗口间操作下拉选框的选项?<optionvalue="3">3</option>
怎么样在IE中实现窗口间操作下拉选框的选项?<optionvalue="4">4</option>
怎么样在IE中实现窗口间操作下拉选框的选项?</select>
怎么样在IE中实现窗口间操作下拉选框的选项?<br/>
怎么样在IE中实现窗口间操作下拉选框的选项?<inputid="showModalDialogWithoutArg"type="button"value="showModalDialogWithoutArg"onclick="window.showModalDialog('HTMLPage2.htm');"/>
怎么样在IE中实现窗口间操作下拉选框的选项?<br/>
怎么样在IE中实现窗口间操作下拉选框的选项?<inputid="showModalDialogWithArg"type="button"value="showModalDialogWithArg"onclick="window.showModalDialog('HTMLPage2.htm',window);"/>
怎么样在IE中实现窗口间操作下拉选框的选项?<br/>
怎么样在IE中实现窗口间操作下拉选框的选项?<inputid="showModelessDialogWithoutArg"type="button"value="showModelessDialogWithoutArg"onclick="window.showModelessDialog('HTMLPage2.htm');"/>
怎么样在IE中实现窗口间操作下拉选框的选项?<br/>
怎么样在IE中实现窗口间操作下拉选框的选项?<inputid="showModelessDialogWithArg"type="button"value="showModalDialogWithArg"onclick="window.showModelessDialog('HTMLPage2.htm',window);"/>
怎么样在IE中实现窗口间操作下拉选框的选项?<br/>
怎么样在IE中实现窗口间操作下拉选框的选项?<inputid="open"type="button"value="open"onclick="window.open('HTMLPage2.htm');"/>
怎么样在IE中实现窗口间操作下拉选框的选项?</form>
怎么样在IE中实现窗口间操作下拉选框的选项?</body>
怎么样在IE中实现窗口间操作下拉选框的选项?</html>
怎么样在IE中实现窗口间操作下拉选框的选项?

HTMLPage2.htm

怎么样在IE中实现窗口间操作下拉选框的选项?<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
怎么样在IE中实现窗口间操作下拉选框的选项?<htmlxmlns="http://www.w3.org/1999/xhtml">
怎么样在IE中实现窗口间操作下拉选框的选项?<head>
怎么样在IE中实现窗口间操作下拉选框的选项?<title>2nd</title>
怎么样在IE中实现窗口间操作下拉选框的选项?怎么样在IE中实现窗口间操作下拉选框的选项?<scriptlanguage="javascript">
怎么样在IE中实现窗口间操作下拉选框的选项?functionInsertToParent()
怎么样在IE中实现窗口间操作下拉选框的选项?怎么样在IE中实现窗口间操作下拉选框的选项?
{
怎么样在IE中实现窗口间操作下拉选框的选项?
varslct=window.parent.document.getElementById("Select1");
怎么样在IE中实现窗口间操作下拉选框的选项?
怎么样在IE中实现窗口间操作下拉选框的选项?doc
=slct.ownerDocument;
怎么样在IE中实现窗口间操作下拉选框的选项?
varopt=doc.createElement('OPTION');
怎么样在IE中实现窗口间操作下拉选框的选项?opt.value
="2nd窗口";
怎么样在IE中实现窗口间操作下拉选框的选项?opt.text
="2nd窗口";
怎么样在IE中实现窗口间操作下拉选框的选项?slct.options.add(opt);
怎么样在IE中实现窗口间操作下拉选框的选项?}

怎么样在IE中实现窗口间操作下拉选框的选项?
怎么样在IE中实现窗口间操作下拉选框的选项?
functionInsertToOpener()
怎么样在IE中实现窗口间操作下拉选框的选项?怎么样在IE中实现窗口间操作下拉选框的选项?
{
怎么样在IE中实现窗口间操作下拉选框的选项?
varslct=window.opener.document.getElementById("Select1");
怎么样在IE中实现窗口间操作下拉选框的选项?
怎么样在IE中实现窗口间操作下拉选框的选项?doc
=slct.ownerDocument;
怎么样在IE中实现窗口间操作下拉选框的选项?
varopt=doc.createElement('OPTION');
怎么样在IE中实现窗口间操作下拉选框的选项?opt.value
="2nd窗口";
怎么样在IE中实现窗口间操作下拉选框的选项?opt.text
="2nd窗口";
怎么样在IE中实现窗口间操作下拉选框的选项?slct.options.add(opt);
怎么样在IE中实现窗口间操作下拉选框的选项?}

怎么样在IE中实现窗口间操作下拉选框的选项?
怎么样在IE中实现窗口间操作下拉选框的选项?
functionInsertToTop()
怎么样在IE中实现窗口间操作下拉选框的选项?怎么样在IE中实现窗口间操作下拉选框的选项?
{
怎么样在IE中实现窗口间操作下拉选框的选项?
varslct=window.top.document.getElementById("Select1");
怎么样在IE中实现窗口间操作下拉选框的选项?
怎么样在IE中实现窗口间操作下拉选框的选项?doc
=slct.ownerDocument;
怎么样在IE中实现窗口间操作下拉选框的选项?
varopt=doc.createElement('OPTION');
怎么样在IE中实现窗口间操作下拉选框的选项?opt.value
="2nd窗口";
怎么样在IE中实现窗口间操作下拉选框的选项?opt.text
="2nd窗口";
怎么样在IE中实现窗口间操作下拉选框的选项?slct.options.add(opt);
怎么样在IE中实现窗口间操作下拉选框的选项?}

怎么样在IE中实现窗口间操作下拉选框的选项?
怎么样在IE中实现窗口间操作下拉选框的选项?
functionInsertByParentFun()
怎么样在IE中实现窗口间操作下拉选框的选项?怎么样在IE中实现窗口间操作下拉选框的选项?
{
怎么样在IE中实现窗口间操作下拉选框的选项?
varwnd=window.parent;
怎么样在IE中实现窗口间操作下拉选框的选项?wnd.AddOpt(
"2nd窗口","2nd窗口");
怎么样在IE中实现窗口间操作下拉选框的选项?}

怎么样在IE中实现窗口间操作下拉选框的选项?
怎么样在IE中实现窗口间操作下拉选框的选项?
functionInsertByOpenerFun()
怎么样在IE中实现窗口间操作下拉选框的选项?怎么样在IE中实现窗口间操作下拉选框的选项?
{
怎么样在IE中实现窗口间操作下拉选框的选项?
varwnd=window.opener;
怎么样在IE中实现窗口间操作下拉选框的选项?wnd.AddOpt(
"2nd窗口","2nd窗口");
怎么样在IE中实现窗口间操作下拉选框的选项?}

怎么样在IE中实现窗口间操作下拉选框的选项?
怎么样在IE中实现窗口间操作下拉选框的选项?
functionInsertByTopFun()
怎么样在IE中实现窗口间操作下拉选框的选项?怎么样在IE中实现窗口间操作下拉选框的选项?
{
怎么样在IE中实现窗口间操作下拉选框的选项?
varwnd=window.top;
怎么样在IE中实现窗口间操作下拉选框的选项?wnd.AddOpt(
"2nd窗口","2nd窗口");
怎么样在IE中实现窗口间操作下拉选框的选项?}

怎么样在IE中实现窗口间操作下拉选框的选项?
怎么样在IE中实现窗口间操作下拉选框的选项?
functionInsertByArgFun()
怎么样在IE中实现窗口间操作下拉选框的选项?怎么样在IE中实现窗口间操作下拉选框的选项?
{
怎么样在IE中实现窗口间操作下拉选框的选项?
varwnd=window.dialogArguments;
怎么样在IE中实现窗口间操作下拉选框的选项?wnd.AddOpt(
"2nd窗口","2nd窗口");
怎么样在IE中实现窗口间操作下拉选框的选项?}

怎么样在IE中实现窗口间操作下拉选框的选项?
怎么样在IE中实现窗口间操作下拉选框的选项?
functionInsertWithArg()
怎么样在IE中实现窗口间操作下拉选框的选项?怎么样在IE中实现窗口间操作下拉选框的选项?
{
怎么样在IE中实现窗口间操作下拉选框的选项?
varwnd=window.dialogArguments;
怎么样在IE中实现窗口间操作下拉选框的选项?
vardoc=wnd.document;
怎么样在IE中实现窗口间操作下拉选框的选项?
varslct=doc.getElementById("Select1");
怎么样在IE中实现窗口间操作下拉选框的选项?
怎么样在IE中实现窗口间操作下拉选框的选项?doc
=slct.ownerDocument;
怎么样在IE中实现窗口间操作下拉选框的选项?
varopt=doc.createElement('OPTION');
怎么样在IE中实现窗口间操作下拉选框的选项?opt.value
="2nd窗口";
怎么样在IE中实现窗口间操作下拉选框的选项?opt.text
="2nd窗口";
怎么样在IE中实现窗口间操作下拉选框的选项?slct.options.add(opt);
怎么样在IE中实现窗口间操作下拉选框的选项?}

怎么样在IE中实现窗口间操作下拉选框的选项?
</script>
怎么样在IE中实现窗口间操作下拉选框的选项?</head>
怎么样在IE中实现窗口间操作下拉选框的选项?<body>
怎么样在IE中实现窗口间操作下拉选框的选项?<inputid="InsertToParent"type="button"value="InsertToParent"onclick="InsertToParent()"/>
怎么样在IE中实现窗口间操作下拉选框的选项?<br/>
怎么样在IE中实现窗口间操作下拉选框的选项?<inputid="InsertToOpener"type="button"value="InsertToOpener"onclick="InsertToOpener()"/>
怎么样在IE中实现窗口间操作下拉选框的选项?<br/>
怎么样在IE中实现窗口间操作下拉选框的选项?<inputid="InsertToTop"type="button"value="InsertToTop"onclick="InsertToTop()"/>
怎么样在IE中实现窗口间操作下拉选框的选项?<br/>
怎么样在IE中实现窗口间操作下拉选框的选项?<inputid="InsertByParentFun"type="button"value="InsertByParentFun"onclick="InsertByParentFun()"/>
怎么样在IE中实现窗口间操作下拉选框的选项?<br/>
怎么样在IE中实现窗口间操作下拉选框的选项?<inputid="InsertByOpenerFun"type="button"value="InsertByOpenerFun"onclick="InsertByOpenerFun()"/>
怎么样在IE中实现窗口间操作下拉选框的选项?<br/>
怎么样在IE中实现窗口间操作下拉选框的选项?<inputid="InsertByTopFun"type="button"value="InsertByTopFun"onclick="InsertByTopFun()"/>
怎么样在IE中实现窗口间操作下拉选框的选项?<br/>
怎么样在IE中实现窗口间操作下拉选框的选项?<inputid="InsertByArgFun"type="button"value="InsertByArgFun"onclick="InsertByArgFun()"/>
怎么样在IE中实现窗口间操作下拉选框的选项?<br/>
怎么样在IE中实现窗口间操作下拉选框的选项?<inputid="InsertWithArg"type="button"value="InsertWithArg"onclick="InsertWithArg()"/>
怎么样在IE中实现窗口间操作下拉选框的选项?</body>
怎么样在IE中实现窗口间操作下拉选框的选项?</html>
怎么样在IE中实现窗口间操作下拉选框的选项?

方法表格

 

showModalDialogWithoutArg

InsertToParent

不能实现

子窗口parent属性为子窗口自身

InsertToOpener

不能实现

<font size="