jQuery DataTables和Columnfilterwidget重置所有filter按钮
我是Javascript的新手。所以我的问题有点傻。
我正在寻找Columnfilterwidget的重置所有filter按钮,并找到了这段代码。
$.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.fnResetAllFilters();
table = $('#example').DataTable({
这是我初始化Datatable的方法。
您需要将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(); }); });