我编写了下面的jQuery函数来调用数据表上的过滤器。但是"改变" jQuery函数似乎似乎只需单击一次就会调用两次,因此,如果我尝试关闭其中一个过滤器,它会立即重新打开。
功能:
$(document).ready(function () {
var table = $('#example').DataTable({
rowReorder: {
selector: 'td:nth-child(2)'
},
responsive: true,
initComplete: function () {
var filters = $('div[id$=referalFilters]').find('input:checkbox');
filters.each(function () {
dict.push({
key: $(this).prop('name'),
value: $(this).prop('checked')
});
$(this).change(function () {
var currentName = $(this).prop('name');
for (var i = 0; i < dict.length; i++) {
if (dict[i].key == currentName) {
if (dict[i].value == true) {
dict[i].value = false;
} else {
dict[i].value = true;
}
}
}
for (var i = 0; i < dict.length; i++) {
if (dict[i].value == true) {
$.fn.dataTable.ext.search.push(function (settings, data, dataIndex) {
var currentStatus = data[3];
var found = false;
for (var i = 0; i < dict.length; i++) {
if (currentStatus == String(dict[i].key)) {
if (dict[i].value == true) {
found = true;
}
}
}
if (found) {
return true;
}
return false;
})
}
}
table.draw();
});
});
//this.api().columns().every( function () {
// var column = this;
//} );
}
});
});
如果有人能让我知道多次触发更改功能,我将不胜感激。
这是jsfiddle:https://jsfiddle.net/a81h11tc/。在Js fiffle中,按钮似乎切换,但过滤不会发生。
答案 0 :(得分:0)
据我所知,你的问题是dict
内未定义的变量initComplete
。在var dict = [];
之前添加var filters = ...
后,它就像一个魅力。 (我的理解是您希望列状态隐藏包含所单击过滤器值的行。如果您想要相反,请相应地修改您的代码。)这是JSFiddle如果改变了代码,它应该按照你想要的方式工作。
提示顺便说一下,请记住要经常检查浏览器的控制台,因为在大多数情况下,您可以看到相应内容的正确错误消息(即代码所说的{ {1}},这基本上是你的代码唯一的问题。)