【问题标题】:Cannot destroy() using "Yet Another DataTables Column Filter" plugin无法使用“Yet Another DataTables Column Filter”插件销毁()
【发布时间】:2014-12-31 08:06:03
【问题描述】:

我正在使用DataTablesYADCF 过滤表格。

在某些时候,我需要暂时从我的表中取消绑定这两个插件,然后再次绑定它们。如果我不使用 YADCF,我可以销毁数据表并再次对其进行初始化。但是,当我使用 YADCF 时,表格的过滤器部分并没有被破坏。

HTML:

<a href="#" id="create">Create</a> | <a href="#" id="destroy"> Destroy</a>

<table id="mytable" class="results table table-striped">
    <thead>
        <tr>
            <th>Head 1</th>
            <th>Head 2</th>
            <th>Head 3</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>12</td>
            <td>13</td>
            <td>14</td>
        </tr>
        <tr>
            <td>12</td>
            <td>13</td>
            <td>14</td>
        </tr>
        <tr>
            <td>152</td>
            <td>13</td>
            <td>154</td>
        </tr>
        <tr>
            <td>1762</td>
            <td>1873</td>
            <td>1874</td>
        </tr>
        <tr>
            <td>124</td>
            <td>1343</td>
            <td>1124</td>
        </tr>
    </tbody>
</table>

没有 YADCF 的 JS JSFIDDLE:

var oTable = $('table');

$('#create').click(function (e) {
    e.preventDefault();
    oTable.dataTable({
        "bJQueryUI": true,
            "bStateSave": true,
            "bPaginate": false,
            "bAutoWidth": false,
    });

});

$('#destroy').click(function (e) {
    e.preventDefault();
    oTable.fnDestroy();
    oTable.attr('class', '');
});

JS 与 YADCF JSFIDDLE:

var oTable = $('table');

$('#create').click(function (e) {
    e.preventDefault();
    oTable.dataTable({
        "bJQueryUI": true,
            "bStateSave": true,
            "bPaginate": false,
            "bAutoWidth": false,
    });


    // Add YADCF
    oTable.yadcf([{
      column_number: 1,
      filter_type: 'range_number',
      ignore_char: 'm'
    }, {
      column_number: 2,
      filter_type: 'text',
      filter_default_label: ' '
    },
    ]);


});

$('#destroy').click(function (e) {
    e.preventDefault();
    oTable.fnDestroy();
    oTable.attr('class', '');
});

谁能建议如何破坏 YADCF 过滤器?

【问题讨论】:

    标签: javascript jquery datatables jquery-datatables yadcf


    【解决方案1】:

    所以,这实际上是一个错误。

    Issue Submitted | Workaround JSFiddle

    JS:

    var oTable = $('table');
    var first = true;
    
    $('#create').click(function (e) {
    
        e.preventDefault();
        oTable.dataTable({
            "bJQueryUI": true,
                "bStateSave": true,
                "bPaginate": false,
                "bAutoWidth": false
        });
    
        if (first) {
            first = false;
            // Add YADCF
            oTable.yadcf([{
                column_number: 1,
                filter_type: 'range_number',
                ignore_char: 'm'
            }, {
                column_number: 2,
                filter_type: 'text',
                filter_default_label: ' '
            } ]);
        } else {
            oTable.find('thead').find('[id^=yadcf-filter-wrapper-table]').each(function (i, v) {
                var cloned = $(this).clone(true);
                console.log( $(this) );
                $(this).closest('th').append( cloned );
                $(this).remove();
                oTable.find('.DataTables_sort_wrapper').css('display', 'inline-block');
            });
            oTable.find('[id^=yadcf]').show();
        }
    
    });
    
    $('#destroy').click(function (e) {
        e.preventDefault();
        oTable.fnDestroy();
        oTable.attr('class', '');
        oTable.off();
        oTable.find('[id^=yadcf]').hide();
        oTable = $('table');
    });
    
    $('#add-row').click(function (e) {
        e.preventDefault();
        $('table').append('<tr><td>' + getRandom() + '</td><td>' + getRandom() + '</td><td>' + getRandom() + '</td></tr>');
    });
    
    function getRandom() {
        return parseInt(10000 * Math.random(), 10);
    }
    

    【讨论】:

      【解决方案2】:

      试试下面的:

      $('#destroy').click(function (e) {
          e.preventDefault();
          oTable.Destroy();
          oTable.attr('class', '');
      });
      

      【讨论】:

      • 行不通。当您使用DataTable 时使用Destroy() - 注意大写D
      • 值得一试 - 以为您正在为新数据表使用 odl refrence (fn)。
      • JSFiddles 供你玩。
      猜你喜欢
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多