2016-03-14 29 views
0

我想單擊按鈕時獲取當前行的數據庫ID。DataTables - 通過點擊事件獲取當前行的數據庫ID

我已經看到了一些與這方面有關的例子,並嘗試了很多,但它似乎主要與舊錶工具擴展相關,而我正在使用編輯器。

使用從編輯工具手冊我收到的JSON在服務器端的響應包含數據庫ID /主鍵值idSrc選項:

{ 
    "data":[ 
    { 
     "id":"1", 
     "name":"Test Name", 
    } 
    ], 
    "options":[], 
    "files":[] 
} 

現在我想通過點擊按鈕來獲取值附着通過API函數來排:row().id()

在此函數它提供瞭如何能夠獲得值的行編號(現在數據庫ID?)一個明顯的例子的示例:

var table = $('#myTable').DataTable(); 
$('#myTable').on('click', 'tr', function() { 
    var id = table.row(this).id(); 
    alert('Clicked row id '+id); 
}); 

所以我已經實現了這個如下:

var editor; 
$(document).ready(function() { 

    editor = new $.fn.dataTable.Editor({ 
    ajax: "/names.php", 
    table: "#example", 
    idSrc: "id", 
    fields: [ { 
     label: "Name:", 
     name: "name" 
    } ] 
    }); 

    var table = $('#example').DataTable({ 
    dom: "Bfrtip", 
    ajax: "/names.php", 
    columns: [ 
     { data: "name" } 
    ] 
    }); 

    $('#example').on('click', 'tr', function() { 
    var id = table.row(this).id(); 
    alert('Clicked row id ' + id); 
    }); 

}); 

這裏的問題是,雖然當我點擊的行(TR)它會提示如下:Clicked row id undefined

爲什麼我回頭看看未定義的值,當它應該發回行ID?

+0

是'table.row(這個)你'返回什麼? – silkfire

+0

@silkfire針對響應的Thx,它返回'Clicked row id [object Object]'。 –

回答

2

當你的實例數據表中,您必須註明id字段rowId,應當註明爲你列

var table = $('#example').DataTable({ 
dom: "Bfrtip", 
ajax: "/names.php", 
columns: [ 
    { data : "id" },//id is the name of your data 
    { data: "name" } 
], 
rowId: 'id' //Here assign the id to your table 
}); 

結果的名稱:https://jsfiddle.net/cmedina/7kfmyw6x/17/

+0

嗨,謝謝你的迴應。我不知道這是否真的解決了問題,因爲您需要在表格數據中看到id。在'idSrc'文檔中,它提到「默認情況下,編輯器將使用數據源對象中的DT_RowId屬性。」並通過服務器端代碼將其更改爲簡單的'id'。所以我想回到這個ID,我不認爲需要在桌上才能做到這一點? –

+0

@CraigvanTonder檢查'rowId'的引用http://datatables.net/reference/option/rowId。 DataTables將嘗試使用該選項'rowId'定義的屬性爲每行自動從數據源讀取一個id值。 – CMedina

+0

感謝你的一堆信息,你對正在查看rowId文檔是正確的。看起來,這是我所需要的主鍵進入該行的id值所需的全部內容,並且從那裏可以很容易地獲得該值。 –

0

由於@CMedina指出,rowId款規定了JSON數據中的值用作每行的id屬性。

這裏是用來獲取其前綴row_行ID值的代碼:

$('#example').on('click', 'tr', function() { 
    // Get the rows id value 
    var id = table.row(this).id(); 
    // Filter for only numbers 
    id = id.replace(/\D/g, ''); 
    // Transform to numeric value 
    id = parseInt(id, 10); 
    // So instead of returning the actual id which is row_1 
    // We get back just the primary key which is 1 
    alert('Clicked row id '+id); 
});