我正在使用jquery插件Datatables 1.10,我想使用custom search过滤同一页面上的两个表,如下所示:
function filterTableByErrorClass(propertiesTable, errorClassName) {
$.fn.dataTable.ext.search.pop();
$.fn.dataTable.ext.search.push(
function(settings, data, dataIndex) {
return $(propertiesTable.row(dataIndex).node()).find('td > div').hasClass(errorClassName);
});
propertiesTable.draw();
}
我的问题是这只适用于其中一个表,即页面加载时已准备就绪的表,另一个表位于js模式中,使用 AJAX 调用加载(见下文),它以html格式加载,加载后,它的行为应该与另一个表相同,例如,所有过滤都应该在客户端完成。
$("div.modal.edit-category-info").on('shown.bs.modal', function () {
req = $.ajax({
url: "some_url",
method: "GET",
success: function(data) {
$('#modalContent').html(data);
if ( $.fn.dataTable.isDataTable( '#edit-category-table' ) ) {
editCategoryTable = $('#edit-category-table').DataTable();
}
else {
editCategoryTable = $('#edit-category-table').DataTable( {
"searching": false,
"paging": false,
"ordering": false,
"bInfo" : false
} );
}
errorValidator("edit-category-table");
attachFilteringEvents("edit-category-form");
},
});
});
我为两个表都设置了一个按钮来触发filterTableByErrorClass()函数,并且我可以通过在第一行中放置断点来验证它在两种情况下都被调用了,但是如果我在过滤函数中放置断点(在filterTableByErrorClass()中),那么只有当我过滤第一个表时才会触发断点,而当我尝试过滤模态表时不会触发断点。
$. fn.dataTable.ext.search不知何故不知道新的模态表吗?我能让它知道吗?
1条答案
按热度按时间qlzsbp2j1#
事实证明,这个问题与模态表加载晚于另一个模态表这一事实无关,过滤不起作用的原因在于配置
我已经应用了它,因为模态表不应该有搜索框。
经过调试,我注意到Datatables中的一个内部变量
bFilter
被设置为false,这个页面告诉我这是指定searching
为false的副作用,它不仅隐藏了搜索框,而且使整个表都无法搜索。总而言之,如果我想从表中去掉搜索框,但仍然希望能够通过其他方式对表应用自己的过滤,我必须在模态表的配置中切换出
"searching": false
,并将其替换为其仅隐藏搜索框(通过从串中省略f),如这里所解释的,以及here。