2016-03-05 49 views
1

嗨,我是一个新手DataTables ....我有一个数据表,我想添加行(一次一个),并具有多行删除。我设法得到正常的功能工作,但问题是,当我删除一行/行,然后尝试添加一个新行,删除的行出现在相同的位置作为选定的行....下面是代码我现在用初始化数据表和功能添加和删除我的数据表中的行....任何帮助,将不胜感激......删除的行出现在添加新行DataTables

  $(document).ready(function(){ 
      var counter = 1 
      $('#addRow').on('click', function (a,b,c,d,e,f) { 

      a = "test" 

      t.row.add([ 
       counter +a, 
       counter +'test', 
       counter +'test', 
       counter +'test', 
       counter +'test', 
       counter +'test' 
      ]).draw(false); 
       counter ++; 
      }); 


      $('#example tbody').on('click', 'tr', function (e) { 
       if ($(this).hasClass('selected')) { 
        $(this).removeClass('selected'); 
        $(this).css('background-color', '') 
       } 
       else { 
        t.$('tr.selected');//.removeClass('selected'); 
        $(this).addClass('selected'); 
        $(this).css('background-color', 'blue'); 
       } 
      }); 


      $('#removeRow').click(function() { 
       var anSelected = fnGetSelected(t); 
       $(anSelected).remove(); 
     });  

      var t = $('#example').DataTable({ 
      'fnCreatedRow': function (nRow, aData, iDataIndex) { 
      $(nRow).attr('id', 'my' + iDataIndex); 
      }, 
      "aoColumnDefs": [ { 
       "aTargets": [0,1,2,3,4,5], 
       "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) { 
        var idx = t.cell(nTd).index().column; 
        var title = t.column(idx).header(); 
        $(nTd).attr("id",$(title).html() +"_"+ iRow) 
       } 
      } ] 
    }); 



}); 

      function fnGetSelected(oTableLocal) 
     { 
      return oTableLocal.$('tr.selected'); 
     } 

上面的代码只是几件事情来测试功能不需要....

****更新**** 表html是写在一个模板中,我打电话给一个表单...具有表单代码的父gsp文件如下... ..

主要GSP文件

<g:form action="saveTravelDetails" id="createRequest" name="createRequest" autocomplete="off">      
<g:render template="newTravelRequest" /> 
<div class="row"> 
    <div class="col-md-12"> 
     <div class="form-group" style="text-align: center;"> 
      <input id="circuit_save" class="btn btn-primary circuit_validate" tabindex="700" class="button_text" type="submit" name="circuit_save" value="Save" /> 
      <input id="circuit_cancel" class="btn btn-default" class="button_text" type="button" name="circuit_cancel" value="Cancel" /> 
      <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#detailsModal">Add new row</button> 
      <button type="button" class="btn btn-primary" id="removeRow">Remove Selected Row</button> 
     </div> 
    </div> 
</div> 
</g:form> 

模板HTML代码如下

<div class="row"> 
    <div class="col-md-12"> 
     <div class="panel panel-default"> 
      <div class="panel-heading"> 
       <i class="fa fa-user"></i> Travel Details 
       <div class="panel-tools"> 
        <a href="#" class="btn btn-xs btn-link panel-collapse collapses"> 
        </a> 
       </div> 
      </div> 
      <div class="panel-body"> 
      <table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> 
       <thead class="alignCenter"> 
       <tr> 
      <th class="headerclass">Departure Date</th> 
      <th class="headerclass">Return Date</th> 
      <th class="headerclass">Departure Destination</th> 
      <th class="headerclass">Arrival Destination</th> 
      <th class="headerclass">Choose Mode Of Transport</th> 
      <th class="headerclass">Cost of Travel</th>   
       </tr> 
       </thead> 
       <tbody></tbody> 
       <tfoot class="alignCenter headerclass"> 
       <tr> 
      <th class="headerclass">Departure Date</th> 
      <th class="headerclass">Return Date</th> 
      <th class="headerclass">Departure Destination</th> 
      <th class="headerclass">Arrival Destination</th> 
      <th class="headerclass">Choose Mode Of Transport</th> 
      <th class="headerclass">Cost of Travel</th>  
       </tr> 
       </tfoot> 
       </table> 

      </div> 
     </div> 
    </div> 
</div> 

在初始化数据表下面给出主文件更新的JavaScript代码...这也有函数定义添加和删​​除行

$(document).ready(function(){ 


     var counter = 1 
    $('#addRow').on('click', function() { 

      t.row.add([ 

       $('#departureDate_1').val(), 
       $('#returnDate_1').val(), 
       $('#startDestination').val(), 
       $('#endDestination').val(), 
       $('#travelMode').val(), 
       $('#travelFare').val(), 

      ]).draw(false); 
      counter ++; 

      $('#detailsModal').modal('hide'); 
     }); 


       $('#example tbody').on('click', 'tr', function (e) { 
        if ($(this).hasClass('selected')) { 
         $(this).removeClass('selected'); 
         $(this).css('background-color', '') 
        } 
        else { 
         t.$('tr.selected');//.removeClass('selected'); 
         $(this).addClass('selected'); 
         $(this).css('background-color', 'blue'); 
        } 
       }); 


      $('#removeRow').click(function() { 
        var anSelected = fnGetSelected(t); 
        $(anSelected).remove(); 
      });  

     var t = $('#example').DataTable({ 
       'fnCreatedRow': function (nRow, aData, iDataIndex) { 
       $(nRow).attr('id', 'my' + iDataIndex); 
       $(nRow).attr('name', 'my' + iDataIndex); // or whatever you choose to set as the id 
       }, 
       "aoColumnDefs": [ { 
        "aTargets": [0,1,2,3,4,5], 
        "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) { 
         var idx = t.cell(nTd).index().column; 
         var title = t.column(idx).header(); 
         $(nTd).attr("name",$(title).html() +"_"+ iRow) 
         $(nTd).attr("id",$(title).html() +"_"+ iRow) 
        } 
       } ] 
     }); 

     $('#departureDate').on('change',function(){ 
      $('.bootstrap-datetimepicker-widget').css('display','none'); 
     }); 

     $('#returnDate').on('change',function(){ 
      $('.bootstrap-datetimepicker-widget').css('display','none'); 
     }); 


     $('#departureDate').datetimepicker({ 
      format: 'YYYY-MM-DD', 
      pick12HourFormat: false, 
      autoclose: true 
     }); 

     $('#returnDate').datetimepicker({ 
      format: 'YYYY-MM-DD', 
      pick12HourFormat: false, 
      autoclose: true 
     }); 



    }); 

function fnGetSelected(oTableLocal) 
{ 
    return oTableLocal.$('tr.selected'); 
} 

在此先感谢

+0

你能创建一个包含相关html代码的代码片段吗? – silviagreen

回答

-1

感谢您阅读我的问题并花时间回答它我找到了解决方案...下面是可用于其他场景的代码.. ..

$('#removeRow').click(function() { 
    var anSelected = fnGetSelected(t); 
    alert(anSelected); 
    t.row(anSelected).remove().draw(false); 
}); 

function fnGetSelected(oTableLocal) { 
    return oTableLocal.$('tr.selected'); 
} 
+0

请使用您问题上的编辑链接添加其他信息。后回答按钮应该只用于问题的完整答案。 - [来自评论](/评论/低质量帖/ 11615916) –

+0

但我想回答这个问题....应该也是在额外的信息或我的答案不完整...我是相当新的这个论坛 – Apoorv

0

尝试

$(anSelected).remove().draw(false); 

因为它是现在你只添加一个新行后重绘表。正如draw() docs说:

不被大多数数据表API操作自动进行一场平局,让行动组(例如添加多行是更有效的,如果你将它们分组

好。选项是在批量删除行后绘制。