jQuery

2017-05-05 6 views
5

के साथ ड्रॉपडाउन सूची के साथ तालिका पंक्ति की प्रतिलिपि कैसे करें मेरे पास एक तालिका है और मैं के बाद इसकी अंतिम पंक्ति को क्लोन करना चाहता हूं नया लिंक दबाया गया है। यह पूरी तरह से ठीक काम करता है जब मेरे पास मेरी पंक्तियों में केवल टेक्स्टबॉक्स हैं लेकिन जब ड्रॉपडाउन होता है तो ऐसा नहीं होता है। कृपया jquery कोड को संशोधित करने में मेरी सहायता करें। यहाँ तालिका के कोड है:jQuery

<div><a href="#" id="addNew">Add New</a></div> 
       <table id="dataTable"> 
        <tr> 
         <th>Item</th> 
         <th>Cost</th> 
         <th></th> 
        </tr> 
        @if (Model != null && Model.Count > 0) 
        { 
         int j = 0; 
         foreach (var i in Model) 
         { 
          <tr> 
           <td>@Html.DropDownListFor(a => a[j].fk_purchase_id, (SelectList)ViewBag.fk_purchase_id, null, htmlAttributes: new { @class = "form-control"})</td> 
           <td>@Html.TextBoxFor(a => a[j].cost, htmlAttributes: new { @class = "form-control" })</td> 
           <td> 
            @if (j > 0) 
            { 
             <a href="#" class="remove">Remove</a> 
            } 
           </td> 
          </tr> 
          j++; 
         } 
        } 
       </table> 

और यहाँ कोड है कि कुछ सुधार की जरूरत है है:

<script> 
     $(function() { 
      //1. Add new row 
      $("#addNew").click(function (e) { 
       e.preventDefault(); 
       var $tableBody = $("#dataTable"); 
       var $trLast = $tableBody.find("tr:last"); 
       var $trNew = $trLast.clone(); 
       alert($trNew.html); 
       var suffix = $trNew.find(':input:first').attr('name').match(/\d+/); 
       $trNew.find("td:last").html('<a href="#" class="remove">Remove</a>'); 
       $.each($trNew.find(':input'), function (i, val) { 
       // Replaced Name 
       var oldN = $(this).attr('name'); 
       var newN = oldN.replace('[' + suffix + ']', '[' + (parseInt(suffix) + 1) + ']'); 
       $(this).attr('name', newN); 
       //Replaced value 
       var type = $(this).attr('type'); 
       if (type.toLowerCase() == "text") { 
       $(this).attr('value', ''); 
        } 
        }); 

       $trLast.after($trNew); 
      }); 

     }); 
    </script> 

मैं बदल रहा इनपुट को चयन whith इस लाइन को संशोधित करने की कोशिश की , लेकिन यह

की सहायता नहीं करता

var suffix = $ trNew.find (': इनपुट: पहला')। Attr ('name')। मिलान (/ \ d + /);

+1

मैं जवाब [यहां] (http के अनुसार एक अलग दृष्टिकोण की सिफारिश करेंगे: // stackoverflow.com/questions/28019793/submit-same-partial-view-called-multiple-times-data-to-controller/28081308#28081308) और [यहां] (http://stackoverflow.com/questions/40539321/a -partial-दृश्य-गुजर-ए-संग्रह का उपयोग-एचटीएम्एल begincollectionitem-हेल्पर/40541892 # 4054 18 9 2) –

उत्तर

2

पहले की तरह अपनी तालिका में tbody जोड़ें:

 <table id="dataTable"> 
     <thead> 
      <tr> 
       <th>Item</th> 
       <th>Cost</th> 
       <th></th> 
      </tr> 
      </thead> 
      <tbody> 
      @if (Model != null && Model.Count > 0) 
      { 
       int j = 0; 
       foreach (var i in Model) 
       { 
        <tr> 
         <td>@Html.DropDownListFor(a => a[j].fk_purchase_id, (SelectList)ViewBag.fk_purchase_id, null, htmlAttributes: new { @class = "form-control"})</td> 
         <td>@Html.TextBoxFor(a => a[j].cost, htmlAttributes: new { @class = "form-control" })</td> 
         <td> 
          @if (j > 0) 
          { 
           <a href="#" class="remove">Remove</a> 
          } 
         </td> 
        </tr> 
        j++; 
       } 
      } 
     </tbody> 
     </table> 

और अपनी स्क्रिप्ट है:

<script> 
    $(function() { 
     $("#addNew").click(function (e) { 
      e.preventDefault();      
      var last = $('#dataTable>tbody>tr:last'); 
      if (last.length > 0) { 
       var name = last.children().find('input,select')[0].name; 
       var index = Number(name.replace(/[^0-9]/gi, '')) + 1; 
       var tr = ('<tr>' + last.html().replace(/[0-9]+__/gi, index + '__') + '</tr>') .replace(/\[[0-9]+\]+[.]/gi, '[' + index + '].'); 
       $('#dataTable tbody').append(tr); 
      } 
     }); 

    }); 
</script> 
+0

धन्यवाद @ एशिकज़मान, यह प्रतिलिपि बनाने में मदद करता है, हालांकि अब नियंत्रक को डेटा पास करने में एक और समस्या है। ** अगर मेरे पास 4 लाइनों की प्रतिलिपि बनाई गई है, तो यह केवल अधिकतम 2 मॉडल आइटम पास करती है। ** केवल टेक्स्टबॉक्स के साथ ही मैं सभी आइटम भेज सकता हूं .. यह अभी भी jquery के साथ कुछ समय हो रहा है, शायद इंडेक्स के साथ ... – Amelie

+0

क्या आप मुझे दिखा सकते हैं आपका एचटीएमएल 4 प्रतिलिपि के बाद? @ एमेली – Ashiquzzaman

+0

यहां पूरा दृश्य है जिसका मैं उपयोग कर रहा हूं: https://jsfiddle.net/aiste/mp5cx5sL/ @Ashiquzzaman – Amelie