我在一个.jsp文件中有两种形式的下拉列表。我希望更改任何列表,以使用两种形式的当前选定参数触发回发到.jsp本身。但是我无法正常工作。这是代码的相关部分:
两种形式都在SearchBrowse.jsp中。这是form1(form2将具有相同的结构。请注意,我尝试使用相同的form id并希望达到这种效果,但是没有用):
<c:set var="counter1" value="0"></c:set> <c:set var="curSp" value="0"></c:set> <form id="myForm" method="post" action="SearchBrowse.jsp"> <b>Select Species:</b> <select name="spChoice" size="1" onchange="submit()"> <c:forEach var="sp" items="${species}"> <c:choose> <c:when test="${param.spChoice == sp.name}"> <c:set var="spFlag" value=" selected"></c:set> <c:set var="curSp" value="${counter1}"></c:set> </c:when> <c:otherwise> <c:set var="spFlag" value=""></c:set> </c:otherwise> </c:choose> <option value="<c:out value='${sp.name}' />" <c:out value='${spFlag}' />> <c:out value="${sp.name}"></c:out> </option> <c:set var="counter1" value="${counter1 +1}"></c:set> </c:forEach> </select> <br></br> </form>
这是form2:
<c:set var="counter2" value="0"></c:set> <c:set var="curChrm" value="0"></c:set> <%-- Implement a dropdown list and and determine which javabean list to be displayed in the table --%> <form id="myForm" method="post" action="SearchBrowse.jsp"> <b>Select Chromosome to browse summary:</b> <select name="chrmChoice" size="1" onchange="submit()"> <c:forEach var="chrms" items="${riceChrmLocation}"> <c:choose> <c:when test="${param.chrmChoice == chrms.name}"> <c:set var="selectFlag" value=" selected"></c:set> <c:set var="curChrm" value="${counter2}"></c:set> </c:when> <c:otherwise> <c:set var="selectFlag" value=""></c:set> </c:otherwise> </c:choose> <option value="<c:out value='${chrms.name}' />" <c:out value='${selectFlag}' />> <c:out value="${chrms.name}"></c:out> </option> <c:set var="counter2" value="${counter2 +1}"></c:set> </c:forEach> </select> <br></br> </form>
当前,当一个表单更改时,另一个下拉列表的选择参数不会回传。我不确定范围是否有问题。我尝试了各种方法,但无法正确完成。我在这里做错了吗?这段代码也有点混乱吗?(如果是,您是否有更好的建议以整洁的方式对其进行编码?)非常感谢。
提交表单时,仅该表单中的字段会根据请求发送。
您可以只使用一种表单(包含所有字段),也可以使用JavaScript,然后再提交以将值从一种表单复制到另一种表单的隐藏元素。
编辑: 这是一个小JS示例:
<!-- test.html --> <html> <head> <script type="text/javascript"> function doCopyAndThenSubmit() { var sourceInput = document.getElementById("source"); //destination should be the hidden field, made it text to have a visual on the operation var destinationInput = document.getElementById("destination"); destinationInput.value = sourceInput.value; //watch the address bar after the OK alert("Did the copy, press OK for the submit"); document.forms["yourForm"].submit(); } </script> </head> <body> Add some text in source and change the value in the select<br/> <form action="test.html" method="GET" name="yourForm"> <select onchange="doCopyAndThenSubmit()"> <option value="x">some value</option> <option value="y">some other</option> </select> <br/>Source: <!-- id must be unique in the entire document (don't confound with name) --> <input name="src" id="source" type="text" value="" /> <br/>Destination: <input name="dest" id="destination" type="text" value="" /> </form> </body> </html>
通常,您将拥有具有相同值的name和id属性,以便于跟踪(而不是先按id然后按名称引用一次输入);我使用了不同的值来加强差异。当然,您将以一种形式出现源,而以另一种形式出现目的地。
<form name="form1" ...> ... <input name="source" id="source" type="text" value="" /> </form> <form name="form2" ...> ... <input name="destination" id="destination" type="hidden" value="" /> </form>