2016-02-04 107 views
0

我正在使用調用我的控制器函數的ajax將數據加載到表中。當選擇新頁面或對列進行排序時,我使用ajax將數據重新加載到相同的原始控制器功能。這是爲了讓我不用馬上加載所有的物品,只在需要的時候才加載。我想讓每一行都有一個onclick的javascript函數,我可以從那個被點擊的行獲取列信息。有任何想法嗎?控制器函數根據用戶想要查看的結果範圍以及排序順序獲取我的數據。在jQuery DataTable初始化中動態設置行onclick事件

我唯一的javascript代碼如下:

<script> 
    $(function() { 
     var oTable; 
     oTable = $('#tblItemModel').DataTable({ 
      "serverSide": true, 
      "paginate": true, 
      "ajaxSource": "/Finance/ItemListAjax", 
      "processing": true, 
      "serverMethod": "GET", 
      "displayLength": 50 
     }); 
    }) 
</script> 

我的HTML如下:

<table class="table table-striped at-table" id="tblItemModel"> 
     <thead> 
      <tr> 
       <th> 
        Id 
       </th> 
       <th> 
        @Html.DisplayNameFor(model => model.Name) 
       </th> 
       <th> 
        @Html.DisplayNameFor(model => model.ListPrice) 
       </th> 
       <th> 
         @Html.DisplayNameFor(model => model.DiscountPrice) 
       </th> 
      </tr> 
    </thead> 
    <tbody class="mousechange"></tbody> 
</table> 

回答

2

我通常以這種方式工作,當您連續單擊獲取數據...

DataTable中()

$('#tblItemModel tbody').on('click', 'tr', function() { 

     var pos = oTable.fnGetPosition(this); 
     var row = oTable.fnGetData(pos);//row = It contains all the data in that row 

    }); 

for DataTable()

$('#tblItemModel tbody').on('click', 'tr', function() { 

     var pos = oTable.row(this).index(); 
     var row = oTable.row(pos).data();//row = It contains all the data in that row 

    }); 
+1

由於該問題中的「oTable」是「DataTable」的一個實例,所以不起作用。如果'oTable'是'dataTable'的一個實例,它會起作用。將'oTable'替換爲'$('#tblItemModel')。dataTable()'來解決這個問題。或者使用[1.10.x API](http://datatables.net/reference/api/)。 –

+0

這是正確的...謝謝 – CMedina

+0

太棒了!那就是訣竅。我在表中初始化時使用「fnDrawCallback」:function(){}取得了一些進展,但是你更簡單。 – Kevin