解决IE不能在新窗口中向父窗口的下拉框添加项的问题

>
首先我们要明确下面的事实:
  1. 利用options.add(new Option("text", "value"));来向下拉列表(SELECT BOX)添加新项(Option)
  2. 在同一个页面利用上述方法添加新项没有任何问题
现在我们要尝试实现下面的功能:
前提
有两个页面A和B,A页面含有一个下拉列表控件
目标
当在A页面通过window.open打开B页面时,要求B页面具有向A页面的下拉列表控件中插入新项(option)的能力。

下面的方式在非IE浏览器上正常运行,IE浏览器中将导致失败:
JavaScript in B page
function updateData() { 
    // get document object of its parent window(opener) 
    var doc  = opener.document, 
    list  = doc.getElementById("ddList"); 
    // insert dd list a new option 
    list.options.add(new Option("New Text", list.options.length)); 
    window.close(); 
}
因为IE不允许在另一个页面去改变当前页面的下拉列表控件的值。但是我们之前说过,IE是允许在自己页面改变自己的下拉列表的值。所以我们的解决思路就是在父窗口增加一个函数,该函数封装了对下拉列表的添加项操作,然后在新窗口中调用这个函数间接地实现增加项功能,以下是解决方案的源代码中的JavaScript部分:
JavaScript code in A page
function popupBPage() { 
    window.open("B.html","", "width=500;height=400"); 
} 
function addOption(list, text, value) { 
    list.options.add(new Option(text, value)); 
}
JavaScript code in B page
function updateData() { 
    // get document object of its parent window(opener) 
    var doc  = opener.document, 
        list  = doc.getElementById("ddList"); 
    // insert dd list a new option 
    opener.addOption(list, document.getElementById("textInput").value, list.options.length); 
    window.close(); 
}
posted @ 2009-10-19 13:34  eliuhy  阅读(526)  评论(0编辑  收藏  举报