【问题标题】:DataTables "Cannot read property 'destroy' of undefined"DataTables“无​​法读取未定义的属性‘销毁’”
【发布时间】:2014-10-11 15:37:09
【问题描述】:

我想创建一个函数来创建一个新的 DataTable。如果表已经存在,我希望我的函数销毁现有表并创建新表。

我这样做了:

$.ajax().done(function(response){
            Init_DT(response['cols'], response['data']);
        });

function Init_DT(cols, data){

        if($('#mytable tr').length > 0){
            table.destroy();
        }

        var table = $('#mytable').DataTable({
            "data": data,
            "columns": cols
        });

    }

此函数可以很好地启动我的第一个表,但在随后的调用中我得到“无法读取未定义的属性 'destroy'”。

【问题讨论】:

  • 第一次调用 table 的长度 = 0 所以不调用 table.destroy。然后它创建数据表实例。但是在第二次调用时,当长度>0时,它不能破坏它。
  • 你是对的。但它不是局部范围变量吗?当你第二次进来时。它真的没有定义。因为表在函数之外被破坏了?它只会在您检查 destroy 后创建?供参考 --> w3schools.com/js/js_scope.asp
  • 是的。但即使我做table = $('#mytable').dataTable();,它应该是全局的,我也得到了同样的错误。有什么建议@Meer?
  • 你能展示一下你刚刚尝试过的代码吗?
  • 什么是错误?

标签: javascript jquery ajax datatables


【解决方案1】:

本地 JavaScript 变量。

在函数内部定义的变量具有局部作用域。函数完成后销毁。

function myFunction() {
var myVar = "value";}

这个函数 myVar 将在函数完成它的工作后被销毁。在下一次调用中,它将再次定义。

使用全局变量。即在函数之外定义它然后使用它。 即

var myVar='value';function myFunction(){//here myVar can be accessed}

或者在你的函数内部给一个变量赋值,它将变成全局变量。

function myFunction(){ myVar = 'value'; }

现在 myVar 也将是全局的。

因此你需要使用

table = $('#mytable').DataTable({
            "data": data,
            "columns": cols
        });

参考:w3Schools JS Variable Scope

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2017-01-15
    相关资源
    最近更新 更多