2015-04-10 2 views
3

Я использую Spring MVC в моем проекте.Несколько выпадающих населенных пунктов из другого выпадающего списка в таблице

У меня есть список значений из таблицы, и я загружаю их в jsp. Использование

c: forEach var = "loan" items = "$ {loans}" JSTL tag, я генерирую таблицу html для результатов.

В этой таблице я показываю два выпадающих списка в каждой строке. Они основатель и цель. Эти выпадающие списки также относятся к таблицам. Я пишу вызов AJAX для заполнения цели Dropdown, основанный на спонсоре.

У меня есть 4 значения для кредитов. Таким образом, его порождающая таблица состоит из четырех строк. в каждом 4-х рядах у него есть выпадающие списки спонсора и цели.

Проблема в том, что если я изменил получателя в одной строке, он заполнит все выпадающие списки цели всех 4 строк.

Я хочу выбрать разные спонсоры и разные цели для каждой строки. Может ли кто-нибудь дать мне правильный путь в этом?

Здесь пока мой JSP

<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8"%> 
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> 
    <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 

    <script> 
    function myHome() { 
     var zoneId = $("#funderId").val(); 
     $(".funder").val($("#funderId option:selected").text()); 
     $("#purpose option").remove(); 
     $("#purpose").append("<option value='0'>--Select--</option>"); 
     $.ajax({ 
      type : "GET", 
      url : "fundLoanDeatils.htm", 
      data : "PURPOSE_ACTION=Purpose&zoneId=" + zoneId, 
      success : function(data) { 
       flagZone = false; 
       var obj = jQuery.parseJSON(data); 
       var funderpurpose = obj.funderpurpose; 
       funderpurpose = funderpurpose 
         .substring(1, funderpurpose.length - 1); 
       funderpurpose = $.trim(funderpurpose); 
       if (funderpurpose != "") { 
        var regioncluserArray = funderpurpose.split(","); 
        var finalTemp = ""; 
        if (regioncluserArray.length >= 1) { 
         for (var i = 0; i < regioncluserArray.length; i++) { 
          var regClusKeyVal = regioncluserArray[i].split("="); 
          var key = regClusKeyVal[0]; 
          var value = regClusKeyVal[1]; 
          if (value != 'undefined') { 
           var temp = "<option value='" + $.trim(key) + "'>" 
             + value + "</option>"; 
          } 
          finalTemp = finalTemp + temp; 
         } 
         if (finalTemp != "") { 
          $("#purpose").append(finalTemp); 
         } 
        } 
       } 
       var shouldUnblock = true; 
      }, 
     }); 
    } 
    </script> 

    <style type="text/css"> 
    #login_block { 
     border: 1 !important; 
     width:auto !important; 
     padding: 10px; 
    } 
    </style> 
      <form id="saveFunds" method="POST" name="saveFunds" action="saveAssign.htm" autocomplete="on"> 
       <div id="search_label" > 
       <table width="90%" cellpadding="2" cellspacing="2" id="listId" >  
        <thead class="search_res_headbg" > 
           <tr bordercolor="black"> 
            <th> <INPUT type="checkbox" class ="it" onchange="checkAll(this)" name="chk[]" /></th> 
            <th>Loan A/c No</th> 
            <th style="width;1%;">Type</th> 
            <th>Funder</th> 
            <th>Purpose</th>     
           </tr></thead> 
           <c:forEach var="loan" items="${loans}"> 
            <tr> 
             <td><input type="checkbox" name="loanId" value="${loan.valueZero}"></td> 
             <td><input type="text" name="loanAccNo" value="${loan.valueOne}" readonly="readonly"></td> 
             <td><input type="text" name="product" value="${loan.valueTwo}" readonly="readonly"></td> 
             <td style="width: 30%"> 
             <select id="funderIds" name="funderIds" 
              style="width: 80%;" onchange="myHome();"> 
               <option value="0">--Select--</option> 
               <c:forEach var="fund" items="${fundMap}"> 
                <option value="${fund.key}">${fund.value}</option> 
               </c:forEach> 
             </select> 
             </td> 
             <td>      
             <select id="purposes" name="purposes" style="width:25%;" onchange="myPurpose()"> 
              <option value="0">--Select--</option> 
              <c:forEach var="purpose" items="${fundProdPurpose}"> 
               <option value="${purpose.id}" >${purpose.name}</option> 
              </c:forEach> 
             </select> 
             </td> 
            </tr> 
           </c:forEach> 
          </table> 
        </div> 
       <div style="float:left; clear:left;margin:10px 0 0 331px;"> 
        <input class="search_btn" type="submit" name="submit" style="margin-left:0%;" value="Save" id="addfundsbtn" /></div> 
      </form> 

ответ

1

Это происходит потому, что у вас есть несколько идентификаторов с таким же именем, как вы назначаете их в C: Foreach петля

<select id="purposes" name="purposes" style="width:25%;" onchange="myPurpose()"> 

Это нет-нет , После того, как вы звоните

$("#purpose").append("<option value='0'>--Select--</option>"); 

в функции вы меняете каждый элемент с таким именем идентификатора, который в данном случае, это все из них. Если вы хотите что-то сделать во всех раскрывающихся списках, тогда вместо них назначьте им имя класса.

Что касается вашей проблемы: Попробуйте назначить каждой строке идентификатор с помощью JSTL C: Foreach атрибут varStatus который отслеживает индекс итерации ...

<c:forEach var="loan" items="${loans}" varStatus="idx"> 
    <tr id="${idx.index}"> 
     // cells here 
    </tr> 
</c:forEach> 

Пропустите индекс вашей функции

function myHome(rowIndex) { 
    // function here 
} 

, включив индекс строки в вызове функции

onchange="myHome(${idx.index});" 

Затем используйте селектор найти JQuery, чтобы перейти от вашей строки таблицы для вашего выбора опции

$("#"+rowIndex).find("#purposes option").remove(); 

В качестве альтернативы можно использовать индекс фактического выбора опции, включив его в качестве части идентификатора. Я предпочитаю добавлять его в строку, потому что тогда каждая строка имеет определенный идентификатор, и ее легко пройти через нее, как только вы узнаете, какую строку вам нужно манипулировать. Имейте в виду, что если у вас несколько таблиц на одной странице, вы можете добавить имя таблицы в индекс строки, тем самым избегайте манипулирования строкой x в каждой таблице.