原因
当使用带有分页的 DataTables 插件时,为了性能和兼容性,DOM 中只存在当前页面行。因此,当您提交表单时,只会提交当前页面表单控件值。
解决方案 1:直接提交表单
诀窍是在提交表单之前将非当前页面的表单元素转换为<input type="hidden">。
var table = $('#example').DataTable();
// Handle form submission event
$('#frm-example').on('submit', function(e){
var form = this;
// Encode a set of form elements from all pages as an array of names and values
var params = table.$('input,select,textarea').serializeArray();
// Iterate over all form elements
$.each(params, function(){
// If element doesn't exist in DOM
if(!$.contains(document, form[this.name])){
// Create a hidden element
$(form).append(
$('<input>')
.attr('type', 'hidden')
.attr('name', this.name)
.val(this.value)
);
}
});
});
有关更多详细信息和示例,请参阅jQuery DataTables: How to submit all pages form data - Submit directly。
解决方案 2:通过 Ajax 提交表单
另一种解决方案是通过 Ajax 提交表单。
var table = $('#example').DataTable();
// Handle form submission event
$('#frm-example').on('submit', function(e){
// Prevent actual form submission
e.preventDefault();
// Serialize form data
var data = table.$('input,select,textarea').serialize();
// Submit form data via Ajax
$.ajax({
url: '/echo/jsonp/',
data: data,
success: function(data){
console.log('Server response', data);
}
});
});
有关更多详细信息和示例,请参阅jQuery DataTables: How to submit all pages form data - Submit via Ajax。
注意事项
请注意,这两种解决方案都只能在客户端处理模式下工作。
链接
更多详情请见jQuery DataTables: How to submit all pages form data。