无法访问DataTables实例

时间:2019-02-13 02:54:37

标签: jquery datatables

我有一个在加载页面时初始化的DataTable。一切正常。

$(document).ready(function () {

    var dtTable = $('#table_pins').DataTable({
        "order": [],
        "columnDefs": [
          { className: "dt-nowrap", "targets": [4] },
          { "targets": [1, 2], "visible": false, "searchable": false }
        ],
        "bFilter": true,
        rowReorder: {
            selector: 'td:nth-child(2)'
        },
        responsive: true
    });

    dtTable.on('search.dt', function(){
      reloadMarkers();
    });

});

在搜索事件中,我需要再次遍历行并更新映射图钉,因此需要访问DataTables实例。我尝试过:

function reloadMarkers() {
    $('#table_pins').DataTable().rows().iterator('row', function(context, index){
        var data = $(this.row(index).data());
    });
}

但是我得到这个错误:

DataTables warning: table id=table_pins - Cannot reinitialise 
DataTable. For more information about this error, please see 
http://datatables.net/tn/3

我查看了文档,并在初始化时添加了"retrieve": true,但仍然出现错误。自实例初始化以来,为什么不检索实例?

1 个答案:

答案 0 :(得分:0)

您的初始错误

  

DataTables警告:表ID = table_pins-无法重新初始化   数据表。有关此错误的更多信息,请参见   http://datatables.net/tn/3

是由于您试图在同一DOM元素上调用DataTable构造函数(如注释中所述),而不是访问已经存在的DataTable实例引起的

    $('#table_pins').DataTable().rows().iterator('row', function(context, index){

您的undefined错误很可能是范围问题-也许您的reloadMarkers()定义位于$(document).ready()回调之外(如果没有更广泛的代码示例,则无法确定。

目前还不清楚您要使用reloadMarkers()实现什么。

我建议您将reloadMarkers()更改为以下内容:

function reloadMarkers() {
    dtTable.rows({search:'applied'}).every(function(){
        //do what you wanted to do with your row data, index, 
        //using this.data(), this.index() methods
    });
}

请记住,应将其放在$(document).ready()内。

或者,更好的方法是,如果您在表搜索之外的其他情况下不调用该函数,则可以使代码更简单,并将函数主体放在search事件回调中。

相关问题