其实想实现的是父窗口的第一个文本框填写后,双击第二个文本框弹出子窗口,子窗口的内容是根据父窗口第一个文本框填写的值从数据库提取的相关若干条(这里是用javabean加jstl c:foreach列出来的),点击其中某一条则关闭子窗口并且子窗口选定的值自动填入父窗口的第二个文本框~
现在情况是点击子窗口中某一条后就报script error~
以下是半成品的子窗口代码:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
        <title>List Year</title>
        <script>  
            function yearchosen(){  
            var n = document.getElementById(yearlist).
            window.close();  
            window.returnValue=n;   
        }  
        </script>    </head>
    <body>
        <jsp:useBean id="obj" class="DBConn.Activity.GetOptionList" scope="page"/>
                        <%
                        obj.getYear();
                        if(obj.getYear().isEmpty()){%>
                        No year is available.<br> 
                                <%
                        }
                        else{
                        %> 
                        Please choose the year:<br><br>
                        <table id="yearlist">
                            <c:forEach var="item" items="${obj.getYear()}"> 
                            <tr><a href="#" onclick="yearchosen()">${item}</a></tr> 
                            </c:forEach> 
                        </table>
</form>
                        <%}%>
                
    </body>
</html>
就是这样,喵~

解决方案 »

  1.   

    用window.opener在子窗口里就可以得到 父窗口在关闭子窗口之前给父窗口中的文本框赋值就可以了你既然拿到了父窗口的引用window.opener那么就可以操作父窗口里面的dom元素了那么给文本框赋值就不是问题了,给你个思路 你自己去写吧很好实现
      

  2.   

    我现在子窗口是用onDblClick=window.showModalDialog('listYear.jsp')打开的~不知window.opener怎么用~
    我是jsp新手小菜鸟~javascript更是不会~能不能帮忙给点核心代码~谢谢啦~喵~
      

  3.   

    你用的showModalDialog打开的对话框用window.opener还不行哦,我也不知道,但是我去网上查了下,
    解决了,我自己也学到了 
    网址给你你自己去看下http://topic.csdn.net/t/20061123/12/5179382.html
    我这边也写了个列子 
    index.jsp  <script type="text/javascript">
       function showList() { window.showModalDialog('productList.jsp',window);
       }
      </script>
      
      </head>
      
      <body>
      
       产品:<input type="text" id="content"/><input type="button" value="选择.." onclick="showList()"/>
      
      </body>
    productList.jsp<script type="text/javascript">
    function sel(obj) { window.dialogArguments.content.value = obj.value; window.close();
    }
    </script>
      </head>
      
      <body>
        <input type="radio" name="product" value="产品1" ondblclick="sel(this)"/>产品1<br/>
        <input type="radio" name="product" value="产品2" ondblclick="sel(this)"/>产品2<br/>
        <input type="radio" name="product" value="产品3" ondblclick="sel(this)"/>产品3<br/>
        <input type="radio" name="product" value="产品4" ondblclick="sel(this)"/>产品4<br/>
      </body>
      

  4.   

    你的例子用起来是没有问题的~不过我自己的可能是由于可选列表用到了c:foreach,所以选择之后依旧在报script error说obj.value取不到~
    <table id="yearlist">
    <c:forEach var="item" items="${obj.getYear()}"> 
    <tr><input type="radio" name="year" value="${item}" onclick="yearchosen(this)"/>${item}</input><br/> 
    </c:forEach> 
    </table>
    麻烦你了
      

  5.   

    和你用到forEach没关系的 你input写错了吧。。><input type="radio" name="year" value="${item}" onclick="yearchosen(this)"/>${item}</input> 
    删除掉。和你后面的冲突了 有2次结尾
      

  6.   

    如果还有问题,你最好把后面的</input>删掉
      

  7.   

    我改啊改的就成这样了~现在取到的obj.value还是undefined<c:forEach var="item" items="${obj.getYear()}"> 
    <tr><a href="#" id="year" value="${item}" onclick="yearchosen(this)">${item}</a><br/> 
    </c:forEach> 
      

  8.   

    我这边完全没问题啊 你把你的js代码发出来。。你${item}有值吗?你看下页面的源代码 
      

  9.   

    页面上能正常显示${item}可是选其中某条后就成undefined了~应该是value="${item}" onclick="yearchosen(this)"没能正确赋值~各种纠结<%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
            <title>List Year</title>
            <script type="text/javascript"> 
                function yearchosen(obj){ 
                var xx=obj.value;
                //window.dialogArguments.Year.value = obj.value;      
                //window.close();
                document.write(xx);
            }  
            </script>
        </head>
        <body>
        
            <jsp:useBean id="obj" class="DBConn.Activity.GetOptionList" scope="page"/>
                            <%
                            obj.getYear();
                            if(obj.getYear().isEmpty()){%>
                            No year is available.<br> 
                                    <%
                            }
                            else{
                            %> 
                            <br>Year:<input typt="text" id="inputyear">
                            <br><br>
                            <table id="yearlist">
                                <c:forEach var="item" items="${obj.getYear()}"> 
                                <tr><a href="#" id="year" value="${item}" onclick="yearchosen(this)">${item}</a><br/> 
                                </c:forEach> 
                            </table>
    </form>
                            <%}%>               
        </body>
    </html>
      

  10.   

    子窗口取值返回父窗口的问题解决了~改回radio不用a href就神奇的好了~但是现在有了新问题:根据父窗口第一个文本框填写的值从数据库提取的相关若干条 ~值通过javascript中的var year=window.dialogArguments.theyear.value已经顺利传到子窗口了,不过要怎么给到jsp调用javabean的地方呢?
    谢谢大家了~喵~
      

  11.   

    什么给jsp调用javabean没听懂你的意思
      

  12.   

    我的意思其实是我父窗口传来的参数怎么给到子窗口~用javascript给过来的话怎么再传给jsp?
      

  13.   

    汇报一下~最后是直接用window.showModalDialog('listVendor.jsp?agcy='+document.getElementById("theagency").value+'',window);传过去了~子窗口jsp里直接拿request.getParameter("year")取的~
    就是这样,喵~