Tài liệu này không được tài liệu lắm. Và nó có vẻ hoạt động khác nhau, hoặc không hoạt động chút nào, giữa các phiên bản (phụ). Tôi nghĩ dataTables được thiết kế để tự động phát hiện các cột HTML, nhưng vì một lý do nào đó, phần lớn thời gian, nó không có. Cách an toàn nhất là để tạo ra riêng tìm kiếm bộ lọc của bạn:
$.fn.dataTableExt.ofnSearch['html-input'] = function(value) {
return $(value).val();
};
này sẽ trở lại trên <input>
's với giá trị 33, và Tokyo trên <select>
' s nơi Tokyo được chọn. Sau đó xác định các cột mong muốn theo loại html-input
;
var table = $("#example").DataTable({
columnDefs: [
{ "type": "html-input", "targets": [1, 2, 3] }
]
});
xem demo dựa trên http://datatables.net/examples/api/form.html ->http://jsfiddle.net/a3o3yqkw/
Về dữ liệu trực tiếp: Vấn đề là, rằng loại chỉ dựa lọc được gọi là lần. dataTables sau đó lưu trữ các giá trị trả về để nó không cần phải "tính toán" tất cả các giá trị hơn và hơn. May mắn thay, dataTables 1.10.x có chức năng tích hợp cho cells
, rows
và pages
được gọi là invalidate
buộc dữ liệuĐể đặt lại bộ nhớ cache cho các mục đã chọn.
Tuy nhiên, khi giao dịch với <input>
cũng có sự cố, việc chỉnh sửa giá trị không thay đổi thuộc tính value
. Vì vậy, ngay cả khi bạn gọi invalidate()
, bạn vẫn sẽ kết thúc trong việc lọc trên giá trị "được mã hóa" cũ.
Nhưng tôi đã tìm thấy giải pháp cho việc này.Buộc <input>
's value
thuộc tính phải được thay đổi với <input>
' giá trị của hiện tại (giá trị mới) và sau đó gọi invalidate
:
$("#example td input").on('change', function() {
var $td = $(this).closest('td');
$td.find('input').attr('value', this.value);
table.cell($td).invalidate();
});
Đối textareas sử dụng text()
thay vì:
$("#example td textarea").on('change', function() {
var $td = $(this).closest('td');
$td.find('textarea').text(this.value);
table.cell($td).invalidate();
});
này cũng là trường hợp khi giao dịch với <select>
. Bạn sẽ cần phải cập nhật các thuộc tính selected
cho phù hợp <option>
's và sau đó invalidate()
trong tế bào như:
$("#example td select").on('change', function() {
var $td = $(this).closest('td');
var value = this.value;
$td.find('option').each(function(i, o) {
$(o).removeAttr('selected');
if ($(o).val() == value) $(o).attr('selected', true);
})
table.cell($td).invalidate();
});
forked fiddle ->http://jsfiddle.net/s2gbafuz/ Hãy thử thay đổi nội dung của đầu vào và/hoặc các Dropdowns, và tìm kiếm cho các giá trị mới ...
Tôi đang cố sử dụng tính năng tìm kiếm toàn cầu được tích hợp sẵn. Tôi muốn nó chỉ tìm kiếm giá trị đã chọn từ menu thả xuống. Nếu bạn xem ví dụ trong liên kết trong câu hỏi của tôi và nhập "Tokyo" vào tìm kiếm, tất cả các hàng sẽ được trả lại. Điều này là do "Tokyo" là một tùy chọn trong tất cả các trình đơn thả xuống. Tôi chỉ muốn những hàng có Tokyo được chọn để trưng bày. Nếu bạn nhập "33", bạn sẽ không thấy hàng nào mặc dù hàng đầu tiên có giá trị "33" trong cột đầu tiên. – kralco626
OK Tôi nhận được những gì bạn đang nói bây giờ. Tôi đã làm một số tìm kiếm và nó không xuất hiện để được một cái gì đó là ngoài DataTables. Tuy nhiên tôi đã tìm thấy [this] (http://stackoverflow.com/a/16571923/4434366). Ông đã viết một đoạn trích tìm kiếm giá trị đã chọn của một trình đơn thả xuống. Rất tiếc, tôi không thể tự cung cấp đoạn trích cho bạn! –