如题。问题产生的背景:
在A页面打开一个模态窗口B,传入A中的select元素对象aSel,在B中用aSel.options[aSel.option.length]=new Option(……在IE中老是报运行时错误,提示该行有不支持的属性或方法,在FF中正常。看了一下有关的书,上述动态添加option的写法应该是跨浏览器的。我直接在A中用该方法添加成功,难道是因为模态窗口的问题的么?SOS

解决方案 »

  1.   

    aSel.options[aSel.options.length]=new Option应该是aSel.options.length楼主options少了个s
      

  2.   

    打字打快了,实际代码中没有少那个s。FF中是正常运行的,错误控制台没有报错。
      

  3.   


    那你在ie下
    alert(aSel)能拿到这个对象吗?
      

  4.   

    alert提示:[object],应该是取到了吧,而且我看到aSel.options.length值是对的,毕竟在FF中没有问题啊。
      

  5.   

    var option = document.createElement('input');
    option.value = 'value';
    option.innerHTML = 'html';
    aSel.appendChild(option);
    改成这种形式 试试~·
      

  6.   

    用DOM的添加节点的方法我也试过了 ,也说不支持该属性或方法,我晕。两种方式为什么A页面添加就可以呢。不解
      

  7.   

    window.dialogArguments.aSel.appendChild(option);这样~·
      

  8.   

    这样也不行。为什么IE中在A页面中用aSel.options[aSel.options.length]=new Option(……则一点问题都没有呢。
      

  9.   

    aSel是怎么传到B页面的?
    window.opener.aSel.options[aSel.option.length]=new Option(..  //这样呢?
      

  10.   

    因为aSel就是A页面里面的元素啊。你确定你用模式窗口打开的新页面,里面传入A页面的aSel这个对象了吗?》
      

  11.   

    在中断调试模式下查看局部变量看到了这个对象。在A页面中打开模态窗口的代码如下:
    ……
    var aSel = document.getElementById("xxx");
    var srcFile="b.jsp";
    var winFeatures="xxxxxxxx";
    window.showModalDialog(srcFile,aSel,winFeatures);在B页面中相关处理函数中;
    ……
    var aSel = window.dialogArguments;
    ……
      

  12.   

    父页面:
    <!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>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head><body>
    <select id="sel">

    </select>
    <script>
    var sel = document.getElementById('sel');
    var returnvalue = window.showModalDialog('b.html',sel);
    if(returnvalue){
    var option = document.createElement('option');
    option.innerHTML = returnvalue;
    sel.appendChild(option)
    }
    </script>
    </body>
    </html>
    子页面:
    <!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>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head><body>
    bbbbbbbbbbbbbbb
    <input type="button" value="click me" onclick="aa()" />
    <script>
    function aa(){
    var sel = window.dialogArguments;
    var option = 'aaaa'
    window.returnValue = option;
    window.close(); 
    }
    </script>
    </body>
    </html>
    楼主看看,做了一个例子~·
      

  13.   

    干脆不要传递这个对象参数,B页面中直接使用window.opener.document.getElementById('xxx')来获取对象。
      

  14.   

    谢谢MuBeiBei给的使用返回值的例子,但是如果多个option值需要传递父窗口的话还是有些麻烦,需要切分字符串的处理。T5500说的window.parent(模态窗口opener为null)获取对象跟直接从A页面传递对象一样,都是能获取到该select对象,我的需求里A页面中有个select对象,B页面中也有个select对象,从B中选取的是A中没有的option,所以处理逻辑中有比较option的value值,用传递的select对象能够进行比较操作、删除操作,就是不能进行添加操作,标准的三种跨浏览器的方法我都试过了,就是报不支持该属性或方法(IE中,FF中能够正常操作)。最后没办法,只能使用从模态窗口中调用父窗口的方法去解决了。
    现在的疑惑是为什么IE中不支持传递的父窗口select对象对自身的option的添加操作,希望有知道原因的哪位能给在下解疑答惑一下。感谢以上两位的回答,尤其是MuBeiBei。暂时不结贴,挂上三四日,希望有我期待的答案。
      

  15.   

    我的机子上,new Option();
    可以用呀。是IE6,你是什么版本?
      

  16.   

    或者把要增加的所有OPTION的各属性值写成一个JSON返回,在A里再建。dialogArguments传值相对还是只能传些简单结构的数据,数组也是对象,但不意味着更复杂的对象也都支持。因为简单的对象方法已经足够满足,就没必要过多地实现它了。
      

  17.   

    测试浏览器:IE 7, FF 3.0