Опубликуйте параметры в двух формах, когда в одной из них произойдет обмен - PullRequest
0 голосов
/ 01 июля 2010

У меня есть выпадающие списки в двух формах в одном .jsp.Я хотел бы, чтобы изменение любого из списков вызывало публикацию обратно в сам файл .jsp с выбранными в данный момент параметрами в обеих формах.Но я не мог заставить это работать.Вот соответствующая часть кода:

Обе формы находятся в SearchBrowse.jsp.Это form1 (form2 будет иметь идентичную структуру. Обратите внимание, что я пытался использовать тот же идентификатор формы и надеюсь достичь этого эффекта, но не сработало):

<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>&nbsp; 
    <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>&nbsp; 
    <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> 

В настоящее время при изменении одной формы параметр выбора другого выпадающего списка не публикуется.Я не уверен, что это проблема с областью применения.Я пробовал разные способы, но не мог понять это правильно.Я сделал что-то не так здесь?Также этот код немного грязный?(Если да, есть ли у вас какие-либо лучшие предложения по аккуратному кодированию?) Большое спасибо.

Ответы [ 3 ]

2 голосов
/ 01 июля 2010

Когда вы отправляете форму, по запросу отправляются только поля из этой формы.

Вы можете использовать только одну форму (со всеми вашими полями) или использовать 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>
0 голосов
/ 01 июля 2010

Есть ли причина, по которой у вас есть две формы?Вы говорите, что хотите, чтобы данные в обеих формах были отправлены, в таком случае я бы поместил все элементы в одну форму.Это упрощает процесс.

Если вы все еще хотите иметь две формы и отправлять детали из обеих, при отправке первой формы вам необходимо использовать javascript.

иметь скрытые поля вформа1 соответствует полям в форме2.Заполните эти скрытые поля только при отправке формы 1:

Где-то в форме 1:

<input type="hidden" name="hdnChrmChoice" />
//do the same for all fields in form 2

onSubmit :

document.form1.hdnChrmChoice.value = document.form2.chrmChoice.value;
... //do the same for all fields in form 2
document.form1.submit();

Однако я все же рекомендовал бы еще раз проверить, возможно ли использовать одну форму.Все упрощает.

0 голосов
/ 01 июля 2010

Одновременно может быть отправлена ​​только одна форма, вы не можете отправить их ОБА. Вы должны объединить их в одну форму. И на всякий случай: помните, что формы не могут быть вложенными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...