【问题标题】:jQuery DataTables and Columnfilterwidget Reset all filters buttonjQuery DataTables 和 Columnfilterwidget 重置所有过滤器按钮
【发布时间】:2014-06-04 09:44:50
【问题描述】:

我是 Javascript 新手。所以我的问题有点傻。

我正在寻找 Columnfilterwidget 的重置所有过滤器按钮并找到此代码。

$.fn.dataTableExt.oApi.fnResetAllFilters = function (oSettings, bDraw/default true/) {
for(iCol = 0; iCol < oSettings.aoPreSearchCols.length; iCol++) {
oSettings.aoPreSearchCols[ iCol ].sSearch = '';
}
$('.filter-term').remove();
oSettings.oPreviousSearch.sSearch = '';
if(typeof bDraw === 'undefined') bDraw = true;
if(bDraw) this.fnDraw();
}

我需要将它绑定到一个按钮才能使其工作。

$(document).ready(function(){
$("button").click(function(){
 $.fn.dataTableExt.oApi.fnResetAllFilters = function (oSettings, bDraw/default true/) {
    for(iCol = 0; iCol < oSettings.aoPreSearchCols.length; iCol++) {
    oSettings.aoPreSearchCols[ iCol ].sSearch = '';
    }
    $('.filter-term').remove();
    oSettings.oPreviousSearch.sSearch = '';
    if(typeof bDraw === 'undefined') bDraw = true;
    if(bDraw) this.fnDraw();
    }

});
});

但它不起作用,我得到的所有按钮点击都是我的页面得到刷新。 我在这里做错了什么???

更新

$(document).ready(function(){
$("button").click(function(e){e.preventDefault();})
$("button").click(function(){
console.log("afterbutton");
 $.fn.dataTableExt.oApi.fnResetAllFilters = function (oSettings, bDraw) {
console.log("insidefunction");
    for(iCol = 0; iCol < oSettings.aoPreSearchCols.length; iCol++) {
    oSettings.aoPreSearchCols[ iCol ].sSearch = '';
    }
    $('.filter-term').remove();
    oSettings.oPreviousSearch.sSearch = '';
    if(typeof bDraw === 'undefined') bDraw = true;
    if(bDraw) this.fnDraw();
    }

});
});

现在页面没有刷新,代码也没有工作, 控制台仅显示直到我单击按钮后的按钮消息。

这段代码有什么问题吗?

非常感谢您的回复,根据您的建议我已经更新了我的代码(我在$(document).ready(function() 之外进行了按钮点击事件)

$(document).ready(function(){
    $.fn.dataTableExt.oApi.fnResetAllFilters = function (oSettings, bDraw) {
        for(iCol = 0; iCol < oSettings.aoPreSearchCols.length; iCol++) {
        oSettings.aoPreSearchCols[ iCol ].sSearch = '';
        }
        $('.filter-term').remove();
        oSettings.oPreviousSearch.sSearch = '';
        if(typeof bDraw === 'undefined') bDraw = true;
        if(bDraw) this.fnDraw();
        }

    } );

    // button click event
    $("button").click(function(e){
            e.preventDefault();
            // 'myDataTable' is the name you gave the datatable at initialisation - oTable or similar
            table.fnResetAllFilters();
      });

这仍然会在按钮单击时刷新我的页面,但是如果我在 $(document).ready(function() 内进行按钮单击事件,那么我会收到错误,因为 table.fnResetAllFilters(); 不是函数。 table = $('#example').DataTable({ 这就是我初始化数据表的方式。

【问题讨论】:

  • 可能是您的默认按钮单击功能导致页面刷新。如果是这样,您需要使用 preventDefault()。 stackoverflow.com/questions/12064164/e-preventdefault-prevent-click
  • 感谢您的回复,我更新了我的问题。
  • $('.filter-term').remove(); 使用这个我可以删除过滤器,但表格和过滤器在使用fnDraw(); 之后不会重置。

标签: javascript jquery datatables jquery-datatables reset


【解决方案1】:

您需要将 preventDefault() 添加到原始按钮单击侦听器中,实际上您已经添加了另一个。

修改您的代码,使其如下所示:

$(document).ready(function(){
   $("button").click(function(e){
      e.preventDefault();
      console.log("afterbutton");
      ...

看起来您已经在按钮点击代码中包含了函数定义。

它需要看起来更像这样:

$(document).ready(function(){
// function definition
 $.fn.dataTableExt.oApi.fnResetAllFilters = function (oSettings, bDraw/default true/) {
    for(iCol = 0; iCol < oSettings.aoPreSearchCols.length; iCol++) {
    oSettings.aoPreSearchCols[ iCol ].sSearch = '';
    }
    $('.filter-term').remove();
    oSettings.oPreviousSearch.sSearch = '';
    if(typeof bDraw === 'undefined') bDraw = true;
    if(bDraw) this.fnDraw();
    }
});

// button click event
$("button").click(function(e){
        e.preventDefault();
        // 'myDataTable' is the name you gave the datatable at initialisation - oTable or similar
        myDataTable.fnResetAllFilters();
  });
});

【讨论】:

  • 我根据您的建议更改了代码,但我的函数仍然没有执行。 $.fn.dataTableExt.oApi.fnResetAllFilters = function (oSettings, bDraw) { console.log("insidefunction"); for(iCol = 0; iCol &lt; oSettings.aoPreSearchCols.length; iCol++) { oSettings.aoPreSearchCols[ iCol ].sSearch = ''; } $('.filter-term').remove(); oSettings.oPreviousSearch.sSearch = ''; if(typeof bDraw === 'undefined') bDraw = true; if(bDraw) this.fnDraw(); }
  • 您能在控制台中看到您的消息吗?
  • 没有错误。 onclick 控制台提供 afterbutton 消息,但它没有执行之后的功能,当我在 console.log("afterbutton"); 之后放置 $('.filter-term').remove(); this.fnDraw(); 时,我的过滤器在按钮单击后被清除,但表和过滤器值保持不变,它们没有得到更新。我也收到错误 this.fnDraw is not a function.
  • 已解决的问题必须像这样添加$('#dataTable').dataTable().fnResetAllFilters();,非常感谢您为帮助我所做的努力。
  • 我遇到了一个问题,点击重置按钮后,我的表格正在重绘,但我的过滤器没有更新,过滤后的术语没有出现在过滤器下拉列表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-24
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
相关资源
最近更新 更多