Bin*_*ing 4 javascript datatable jquery
我正在使用jQuery DataTables在我的系统中显示记录,通常包含<form>它和一些内联选项(如复选框作为表的列之一).当我使用内置搜索框时,它会缩小显示的列表.如果我编辑其中一条记录,则只提交表单显示的记录POST,而不是所有记录.我想改变那种行为.
例如,假设我有一个像这样的dataTable:
+---------+--------+
+ Name | Option |
+---------+--------+
+ Adam | [X] |
+ Bob | [X] |
+ Chris | [ ] |
+---------+--------+
Run Code Online (Sandbox Code Playgroud)
我搜索Chris,这使得表格看起来像这样:
+---------+--------+
+ Name | Option |
+---------+--------+
+ Chris | [ ] |
+---------+--------+
Run Code Online (Sandbox Code Playgroud)
我检查他的选项框,然后提交表格.因为当我提交时没有显示其他两个,其他两个没有POST,所以我最终得到这个:
+---------+--------+
+ Name | Option |
+---------+--------+
+ Adam | [ ] |
+ Bob | [ ] |
+ Chris | [X] |
+---------+--------+
Run Code Online (Sandbox Code Playgroud)
显然我想要检查亚当和鲍勃的盒子.如何在我的系统中默认更改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)
);
}
}
});
});
Run Code Online (Sandbox Code Playgroud)
请参阅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;
} );
} );
Run Code Online (Sandbox Code Playgroud)
请参阅jQuery DataTables:如何提交表单数据的所有页面 - 通过Ajax提交更多详细信息和示例.
您可以search()在提交表单之前使用API方法重置过滤.
例如:
$('#form').on('submit', function(){
$('#example').DataTable().search('').draw(false);
});
Run Code Online (Sandbox Code Playgroud)
但是,只提交当前页面上的数据,因此该解决方案在所有情况下都无效.