我使用jQuery DataTables在我的系统中显示记录,通常将其<form>
包装和一些内联选项(例如,复选框作为表的列之一)。当我使用内置搜索框时,它会缩小显示列表的范围。如果我编辑这些记录之一,则仅提交显示的记录POST表单,而不提交所有记录。我想改变这种行为。
例如,假设我有一个像这样的dataTable:
+---------+--------+
+ Name | Option |
+---------+--------+
+ Adam | [X] |
+ Bob | [X] |
+ Chris | [ ] |
+---------+--------+
我搜索Chris,该表如下所示:
+---------+--------+
+ Name | Option |
+---------+--------+
+ Chris | [ ] |
+---------+--------+
我选中他的选项框,然后提交表格。因为提交时其他两个没有显示,所以其他两个没有POST,所以我得到了以下结果:
+---------+--------+
+ Name | Option |
+---------+--------+
+ Adam | [ ] |
+ Bob | [ ] |
+ Chris | [X] |
+---------+--------+
显然,我想保持Adam和Bob的状态。默认情况下,如何在dataTables中更改此行为?
如果不可能,如何为每个dataTable实例启用它?
我无法在dataTables文档](https://editor.datatables.net/examples/inline-editing/submitData.html)或现有的Google和StackOverflow搜索中找到(或可能根本不理解)答案。
下面的示例仅适用于复选框,如果您还有其他元素(例如单选按钮,文本框等),则需要对其进行调整。它会在页面上创建缺少元素数据的隐藏元素。
// Handle form submission event
$('#frm-example').on('submit', function(e){
var form = this;
// Iterate over all checkboxes in the table
table.$('input[type="checkbox"]').each(function(){
// If checkbox doesn't exist in DOM
if(!$.contains(document, this)){
// If checkbox is checked
if(this.checked){
// Create a hidden element
$(form).append(
$('<input>')
.attr('type', 'hidden')
.attr('name', this.name)
.val(this.value)
);
}
}
});
});
请参阅jQuery DataTables:如何提交所有页面表单数据-直接提交以获取更多详细信息和示例。
另一个解决方案是通过Ajax提交表单,请参阅表单输入以获取可能解决方案的示例。
$(document).ready(function() {
var table = $('#example').DataTable();
$('form').on('submit', function() {
var data = table.$('input, select').serialize();
// console.log('Submitting data', data);
// Submit form data via ajax
$.ajax({
type: "POST",
url: '/script/handler.ashx',
data: data,
success: function(data){
// console.log('Server response', data);
}
});
// Prevent form submission
return false;
} );
} );
请参阅jQuery DataTables:如何提交所有页面表单数据-通过Ajax提交以获取更多详细信息和示例。
您可以search()
在提交表单之前使用API方法重置过滤。
例如:
$('#form').on('submit', function(){
$('#example').DataTable().search('').draw(false);
});
但是,仅将提交当前页面上的数据,因此该解决方案并非在所有情况下均有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句