如果输入太快,ajax 重新加载的 DataTable 会黑屏
DataTable with ajax reload blacks out the screen if typing too fast
我有一个 table,我正在使用 DataTables 并用 ajax 重新加载它。 table 是一个基本的 table:
<table class="table table-striped at-table" id="tblAccountModel">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.AccountId)
</th>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
</tr>
</thead>
<tbody class="mousechange">
</tbody>
</table>
我的 javascript 设置是:
$(function () {
oTable = $('#tblAccountModel').DataTable({
"serverSide": true,
"paginate": true,
"ajaxSource": "/Finance/AccountListAjax",
"processing": true,
"serverMethod": "GET",
"displayLength": 50,
"fnDrawCallback": function (oSettings) {
if (20 > oSettings.fnRecordsDisplay()) {
$(oSettings.nTableWrapper).find('.dataTables_paginate').hide();
$(oSettings.nTableWrapper).find('.dataTables_length').hide();
}
}
});
当我在搜索框中键入内容时,看起来好像每次按键后都在加载。如果我打字速度非常快,它会加载很多并且背景会变暗,如果我打字足够多,最终会变成全黑。退出模态时,背景变暗,就像模态仍然存在一样,我无法与屏幕交互。
如何防止这种情况,或者如何防止它尝试加载每个新角色??
数据表搜索是由搜索输入的keyup事件触发的,所以每次按键都会向服务器发出请求。有多种方法可以修改此行为:您可以像这样取消绑定 keyup 事件:
$("div.dataTables_filter input").unbind();
并通过 return 按键触发搜索:
$("div.dataTables_filter input").keyup(function (e) {
if (e.keyCode === 13) {
oTable.search(this.value).draw();
}
});
或从表单提交事件触发搜索:
$("#form-filter").submit(function (e) {
e.preventDefault();
var searchTerm = $('#filter input').val();
oTable.search(searchTerm).draw();
});
还有一个插件会添加一个'delay',所以在输入后请求:
https://www.datatables.net/plug-ins/api/fnSetFilteringDelay
您将其附加到搜索框 keyup 事件:
var searchDelay = null;
$('div.dataTables_filter input').on('keyup', function () {
var search = $('div.dataTables_filter input').val();
clearTimeout(searchDelay);
searchDelay = setTimeout(function () {
if (search != null) {
oTable.search(search).draw();
}
}, 750);
});
我有一个 table,我正在使用 DataTables 并用 ajax 重新加载它。 table 是一个基本的 table:
<table class="table table-striped at-table" id="tblAccountModel">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.AccountId)
</th>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
</tr>
</thead>
<tbody class="mousechange">
</tbody>
</table>
我的 javascript 设置是:
$(function () {
oTable = $('#tblAccountModel').DataTable({
"serverSide": true,
"paginate": true,
"ajaxSource": "/Finance/AccountListAjax",
"processing": true,
"serverMethod": "GET",
"displayLength": 50,
"fnDrawCallback": function (oSettings) {
if (20 > oSettings.fnRecordsDisplay()) {
$(oSettings.nTableWrapper).find('.dataTables_paginate').hide();
$(oSettings.nTableWrapper).find('.dataTables_length').hide();
}
}
});
当我在搜索框中键入内容时,看起来好像每次按键后都在加载。如果我打字速度非常快,它会加载很多并且背景会变暗,如果我打字足够多,最终会变成全黑。退出模态时,背景变暗,就像模态仍然存在一样,我无法与屏幕交互。
如何防止这种情况,或者如何防止它尝试加载每个新角色??
数据表搜索是由搜索输入的keyup事件触发的,所以每次按键都会向服务器发出请求。有多种方法可以修改此行为:您可以像这样取消绑定 keyup 事件:
$("div.dataTables_filter input").unbind();
并通过 return 按键触发搜索:
$("div.dataTables_filter input").keyup(function (e) {
if (e.keyCode === 13) {
oTable.search(this.value).draw();
}
});
或从表单提交事件触发搜索:
$("#form-filter").submit(function (e) {
e.preventDefault();
var searchTerm = $('#filter input').val();
oTable.search(searchTerm).draw();
});
还有一个插件会添加一个'delay',所以在输入后请求:
https://www.datatables.net/plug-ins/api/fnSetFilteringDelay
您将其附加到搜索框 keyup 事件:
var searchDelay = null;
$('div.dataTables_filter input').on('keyup', function () {
var search = $('div.dataTables_filter input').val();
clearTimeout(searchDelay);
searchDelay = setTimeout(function () {
if (search != null) {
oTable.search(search).draw();
}
}, 750);
});