Javascript 无法重新初始化JQuery数据表
我使用jquerydatatables显示网格内的数据。在初始化页面加载时,脚本使用DateTime。今天,进一步处理它们,问题是在初始化页面加载之后,当我尝试使用用户输入日期进行进一步处理时。我有以下错误 DataTables警告(表id='dataTable'):无法重新初始化dataTable。 要检索此表的DataTables对象,请不要传递任何参数或查看Bretrive和bDestroy的文档Javascript 无法重新初始化JQuery数据表,javascript,jquery,json,jquery-datatables,Javascript,Jquery,Json,Jquery Datatables,我使用jquerydatatables显示网格内的数据。在初始化页面加载时,脚本使用DateTime。今天,进一步处理它们,问题是在初始化页面加载之后,当我尝试使用用户输入日期进行进一步处理时。我有以下错误 DataTables警告(表id='dataTable'):无法重新初始化dataTable。 要检索此表的DataTables对象,请不要传递任何参数或查看Bretrive和bDestroy的文档 function getDate() { var date = $('input[n
function getDate() {
var date = $('input[name="myDate"]').val();
return date;
}
$('#myDate').click(updateDate);
function updateDate() {
$('#dataTable').dataTable({
"bServerSide": true,
"sAjaxSource": "/Home/Ajax",
"fnServerParams": function (aoData) {
var date = getDate();
aoData.push({ "name": "myDate", "value": date });
},
//... there's more
}
updateDate();
脚本放在页面底部。尝试将“bDestroy”:true添加到选项对象文本中,例如
$('#dataTable').dataTable({
"bServerSide": true,
....
"bDestroy": true
});
检查代码中是否存在对datatable的重复调用。如果不小心多次初始化表,它会返回此错误,我知道这是一个老问题。但这是为其他有类似问题的人准备的 您应该销毁旧的数据表分配。 在创建新的datatable之前,请使用以下代码
$("#dataTable").dataTable().fnDestroy();
您要做的第一件事是清理和销毁数据表
var tables = $.fn.dataTable.fnTables(true);
$(tables).each(function () {
$(this).dataTable().fnClearTable();
$(this).dataTable().fnDestroy();
});
然后重新创建
$("#datagrid").dataTable();
DataTables API已更改,但如果再次尝试重新初始化datatable,仍会引发此错误 您可以检查它是否已使用以下工具创建:
$.fn.DataTable.isDataTable("#myTable")
并将其销毁以便重新创建:
$('#myTable').DataTable().clear().destroy();
这不是最有效的方法,但它是有效的。应该可以在不首先破坏表的情况下更新表,只需使用
清除和行.add
,但当数据源是传递给构造函数的数组时,我还没有找到这样做的方法 新的Datatables API有一个重新加载函数,它将再次从ajax源获取数据,而无需先销毁表。当我有一个包含大量行(5000+行)的表时,销毁要比初始加载花费更长的时间,加上销毁时“处理”框不会显示,但重新加载速度非常快,在工作时正确显示“处理”框
下面是问题中代码的更新版本,它使用新的API来实现所需的效果:
function getDate() {
var date = $('input[name="myDate"]').val();
return date;
}
$('#myDate').click(updateDate);
// Use .DataTable instead of .dataTable
// It returns a different object that has the ajax attribute on it.
var myDataTable = $('#dataTable').DataTable({
"bServerSide": true,
"sAjaxSource": "/Home/Ajax",
"fnServerParams": function (aoData) {
var date = getDate();
aoData.push({ "name": "myDate", "value": date });
},
//... there's more
function updateDate() {
myDataTable.ajax.reload();
}
我所做的唯一更改是使用.DataTable
而不是.DataTable
,并维护对返回值myDataTable
的引用,以便可以使用它调用.ajax.reload()
清除现有的数据表:
$(this).dataTable().fnClearTable();
$(this).dataTable().fnDestroy();
这绝对是我想要的。重新初始化datat表的很好的解决方案这对我很有用
变量表=$('#表1')。数据表({
摧毁:没错,
回答:是的,
.....
}); 谢谢,但添加了“bDestroy”:真正的错误信息消失了,但我没有得到日期值,因此错误也随着日期值消失了。因此,问题仍然存在。仅使用bdestory:true对我来说效果很好。新数据将添加到旧数据中,然后您将获得两个数据的表感谢您的解决方案仅使用bdestory:true对我来说效果很好在较新版本的数据表中,bdestory
选项已重命名为destroy
(),但是bDestroy
仍能正常工作。您能具体说明一下吗?当dataTable未初始化时,它对我不起作用,我们试图销毁它。为了解决这个问题,我把它包装在try-catch块中我的表内容在销毁后一直在增加,所以不知何故,数据一直在增加。我们现在到处都可以使用大写的D
字母坐在DataTable
上吗?有了新的API,这应该会被选为可接受的顶部answer@andi--大写字母“D”是一个错误:大写字母D认为这是一个错误,但事实并非如此:
var myDataTable = $('#dataTable').DataTable();
myDataTable.ajax.reload();