我在这里看到了很多线程,这些线程展示了如何在输入时实现搜索(默认行为是每次按键后搜索),但由于某种原因,当我对 DataTables 代码进行服务器端处理时,它会被忽略,并且默认行为又回来了。有人知道如何仅在用户按下回车键后才开始搜索吗?
这就是我现在得到的,代码的搜索部分被简单地忽略(searchDelay 也没有效果 - 来自 DataTables 文档)
var adminRoles;
$(document).ready(function () {
adminRoles = $('#adminRoles').dataTable({
info: true,
order: [[0, 'asc']],
processing: true,
serverSide: true,
searchDelay: 500, //does't work
ajax: {
url: "@Url.Action("GetRoles","Admin")",
type: "POST"
},
columnDefs: [
{ data: "Name", targets: 0 },
{ data: "KeyName", targets: 1 },
{
data: "Id",
className: "text-center editDetail clickable",
render: function (data, type, row) {
return '<button class="btn btn-default btn-xs"><span class="glyphicon glyphicon-pencil text-primary" /></button>';
},
sortable: false,
searchable: false,
targets: 2
}
],
language: {
url: '@Url.Content(@Resource.js_DataTables_Language)'
}
}).api();
$('#adminRoles_filter input').unbind().bind('keypress', function (e) {
if (e.which == 13) {
alert('You pressed enter!'); //doesn't get hit
//adminRoles.search(this.value).draw();
}
return;
});
});
最佳答案
使用initComplete
选项来定义一个函数,该函数将在表初始化时调用,并使用下面的代码按 Enter 键进行搜索。
adminRoles = $('#adminRoles').dataTable({
initComplete: function(){
var api = this.api();
$('#adminRoles_filter input')
.off('.DT')
.on('keyup.DT', function (e) {
if (e.keyCode == 13) {
api.search(this.value).draw();
}
});
},
// ... skipped ...
});
关于jquery - DataTables 服务器端输入搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33631440/