2016-02-22 14 views
11

Tôi đang nghiên cứu phát triển lịch sử của một người dùng cụ thể và tôi muốn nó được thực hiện với dataTables. Tuy nhiên, tôi không thể tìm thấy cách mà tôi có thể làm cho hàng của tôi hoặc một ô cụ thể có thể nhấp. Tôi cần mở các liên kết riêng biệt với các nhấp chuột riêng biệt cho hàng cụ thể. Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn trước !!!Làm cách nào để hiển thị hàng hoặc ô có thể định cấu hình?

Đã chỉnh sửa :: Nếu tôi nhấp vào một hàng, tôi cần tất cả dữ liệu của hàng, đó không phải là vấn đề. Tôi có thể làm điều đó. Điều tôi cần biết là thực hiện yêu cầu $ .ajax() với dữ liệu hàng cụ thể đó. Tôi nghĩ rằng điều này sẽ làm. Tuy nhiên, thật tuyệt khi biết cách mở một liên kết trong một tab mới khi nhấp chuột vào hàng.

$(document).ready(function() { 
 
    var dataSet = [ 
 
     [] 
 
    ]; 
 
    $.ajax({ 
 
     type: 'POST', 
 
     url: "webservices/view_patient_medical_history.php", 
 
     async: false, 
 
     //data: {'log_id': data}, 
 
     success: function(response) { 
 
      dataSet = JSON.parse(response); 
 
     } 
 
    }); 
 

 
    // var dataSet_arr = jQuery.makeArray(dataSet['responseText']); 
 

 
    $('#patient_medical_history').DataTable({ 
 
     data: dataSet, 
 
     columns: [{ 
 
      title: "Patient ID", 
 
      class: "center" 
 
     }, { 
 
      title: "Current Medications", 
 
      class: "center" 
 
     }, { 
 
      title: "Allergies", 
 
      class: "center" 
 
     }, { 
 
      title: "Diabetes", 
 
      class: "center" 
 
     }, { 
 
      title: "Asthma", 
 
      class: "center" 
 
     }, { 
 
      title: "Arthritis", 
 
      class: "center" 
 
     }, { 
 
      title: "High Blood Pressure", 
 
      class: "center" 
 
     }, { 
 
      title: "Kidney Problem", 
 
      class: "center" 
 
     }, { 
 
      title: "Liver Problem", 
 
      class: "center" 
 
     }, { 
 
      title: "Heart Problem", 
 
      class: "center" 
 
     }, { 
 
      title: "Other Problems", 
 
      class: "center" 
 
     }, { 
 
      title: "Present Problem", 
 
      class: "center" 
 
     }, { 
 
      title: "Last Updated", 
 
      class: "center" 
 
     }], 
 
     "scrollX": true, 
 
     //"paging": false, 
 
     "info": false, 
 
     //"lengthMenu": false, 
 
     dom: 'lBfrtip', 
 
     buttons: [ 
 
      'copy', 'pdf', 'print' 
 
     ] 
 

 

 
     /*"paging": false, 
 
     "info": false, 
 
     dom: 'Bfrtip', 
 
     buttons: [ 
 
      'excel', 'pdf', 'print' 
 
     ]*/ 
 
    }); 
 

 
    $('th').css("white-space", "nowrap"); 
 
});

+1

'Tôi cần phải mở các liên kết riêng biệt với các nhấp chuột riêng cho row.' đặc biệt vì vậy những gì giá trị bạn đang sử dụng để mở khác nhau liên kết? bạn đang tìm nạp từ hàng chính nó? –

+0

Tôi xin lỗi, bạn đời. Không bận tâm để thêm các mã không cần thiết vì hầu như tất cả mọi người được sử dụng để thực hiện phổ biến của datatables. Tất cả những gì tôi muốn với những tính năng cơ bản đó là làm cho các hàng có thể nhấp được. Dù sao ... đây là mã của bản demo của tôi tanle. Tôi muốn các hàng được nhấp vào. –

+0

Tôi đã chỉnh sửa câu hỏi của mình bằng mã của cấu trúc cơ bản của bảng. Bây giờ, tôi cần những hàng có thể nhấp. –

Trả lời

14

Để kích hoạt nhấp chuột vào ô bạn phải sử dụng một trình xử lý sự kiện giao - điều này sẽ làm việc trên bất kỳ DataTable:

$('.dataTable').on('click', 'tbody td', function() { 

    //get textContent of the TD 
    console.log('TD cell textContent : ', this.textContent) 

    //get the value of the TD using the API 
    console.log('value by API : ', table.cell({ row: this.parentNode.rowIndex, column : this.cellIndex }).data()); 
}) 

Lấy dữ liệu của một hàng nhấp có thể được thực hiện bằng cách

$('.dataTable').on('click', 'tbody tr', function() { 
    console.log('API row values : ', table.row(this).data()); 
}) 

Nếu bạn muốn gửi nội dung hàng qua AJAX, bạn nên chuyển đổi mảng thành đối tượng và sau đó bao gồm mảng đó thành data:

$('.dataTable').on('click', 'tbody tr', function() { 
    var data = table.row(this).data().map(function(item, index) { 
    var r = {}; r['col'+index]=item; return r; 
    }) 
    //now use AJAX with data, which is on the form [ { col1 : value, col2: value ..}] 
    $.ajax({ 
    data: data, 
    url: url, 
    success: function(response) { 
     ... 
    } 
}) 

Nếu bạn chỉ muốn một liên kết đơn giản trong một tế bào với target: _blank bạn có thể sử dụng render:

columns: [ 
    { title: "Patient ID", class: "center", render: function(data, type, full, meta) { 
    return '<a href="showdata/id?'+data+'" target=_blank>Show patient</a>' 
    } 
}, 
+7

Tôi nghĩ bạn quên đề cập đến cách đặt biến 'table' –

+0

Bạn có thể sử dụng điều này cho biến 'bảng': ' var table = $ ('. dataTable'). DataTable(); ' – Neman

0

Bạn cần phải thêm một eventhandler trên nhấp chuột để tế bào (td) của DataTable của bạn và bạn phải xác định các hành động những gì bạn muốn xử lý trong eventhandler đó.

datatables

là một nguồn tuyệt vời để xem qua và phát xung quanh.

4

Trước tiên hãy chắc chắn rằng bạn thay đổi mã khởi tạo DataTable của bạn để lưu vào một biến như thế này

var oPatientMedicalHistory = $('#patient_medical_history').DataTable({ 
    //your stuff 
}); 

Sau đó, bạn có thể gán một sự kiện click vào tất cả các hàng như

EDIT này: Như được chỉ ra bởi Gyrocode.com, chúng ta nên sử dụng trình xử lý sự kiện được ủy quyền khi trình xử lý sự kiện được tạo tự động như chúng ta trang. Vì vậy, mã nên giống như thế.

$('#patient_medical_history tbody').on('dblclick','tr', function() { 
    var currentRowData = oPatientMedicalHistory.row(this).data(); 
    // alert(currentRowData[0]) // wil give you the value of this clicked row and first index (td) 
    //your stuff goes here 
}); 

Điều này phải giúp bạn.

+0

cảm ơn rất nhiều, bạn đời. Điều này sẽ giúp tôi tiếp tục với nó. Tuy nhiên, tôi khá mới với datatables. Bạn có thể cho tôi biết currentRowData [0] cung cấp cho tôi hàng được nhấp hay không, thì hàm currentRowData [1] sẽ trả về cái gì? và nếu tôi muốn nhận được giá trị của một ô cụ thể của hàng đó, thì quá trình này có thể là gì? –

+1

'currentRowData' = mảng giá trị của hàng hiện tại ' currentRowData [0] '= chỉ mục đầu tiên của mảng, có nghĩa là giá trị td đầu tiên của hàng, tương tự' currentRowData [1] 'sẽ cho bạn giá trị td thứ hai –

+4

Điều này sẽ chỉ hoạt động đối với các hàng trên trang đầu tiên vì DataTables tạo ra các nút 'tr' động. Bạn cần sử dụng trình xử lý sự kiện được ủy nhiệm, ví dụ '$ ('# patient_medical_history tbody'). ('Dblclick', 'tr', function() {' –

Các vấn đề liên quan