如何使用jQuery DataTables从所有页面提交复选框
How to submit checkboxes from all pages with jQuery DataTables
我正在尝试获取每一行的第一个单元格(td
(并获取它,但仅适用于当前页面。如果我导航到下一页,则不会发送上一页上选中的复选框。
<table class="table" id="example2">
<thead><tr>
<th>Roll no</th><th>Name</th></tr><thead>
<?php
$sel = "SELECT * FROM `st`";
$r = mysqli_query($dbc, $sel);
while ($fet = mysqli_fetch_array($r)) {
?>
<tr>
<td><?php echo $fet['trk'] ?></td>
<td><input type="text" value="<?php echo $fet['ma'] ?>" id="man" class="form-control"></td>
<td><input type="checkbox" id="check" name="myCheckbox" class="theClass"></td></tr>
<?php } ?>
</table>
<input type="submit" id="sub_marks" class="btn btn-info" value="Submit & Continue">
<script src="plugins/datatables/jquery.dataTables.min.js" type="text/javascript"></script>
<script src="plugins/datatables/dataTables.bootstrap.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$('#example2').DataTable({
"paging": true,
"lengthChange": false,
"searching": false,
"ordering": true,
"info": true,
"autoWidth": false,
})
});
</script>
<script>
$('#sub_marks').click(function () {
var values = $("table #check:checked").map(function () {
return $(this).closest("tr").find("td:first").text();
}).get();
alert(values);
})
</script>
原因
jQuery DataTables 出于性能原因从 DOM 中删除不可见的行。提交表单时,仅将可见复选框的数据发送到服务器。
解决方案 1.提交表格
您需要在表单提交时将选中且在 DOM 中不存在的元素<input type="checkbox">
转换为<input type="hidden">
。
var table = $('#example').DataTable({
// ... skipped ...
});
$('form').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)
);
}
}
});
});
解决方案 2:通过 Ajax 发送数据
var table = $('#example').DataTable({
// ... skipped ...
});
$('#btn-submit').on('click', function(e){
e.preventDefault();
var data = table.$('input[type="checkbox"]').serializeArray();
// Include extra data if necessary
// data.push({'name': 'extra_param', 'value': 'extra_value'});
$.ajax({
url: '/path/to/your/script.php',
data: data
}).done(function(response){
console.log('Response', response);
});
});
演示
请参阅 jQuery DataTables: 如何提交所有页面表单数据以获取更多详细信息和演示。
笔记
- 每个复选框都应分配有唯一值的
value
属性。 - 避免对多个元素使用
id
属性check
,此属性应该是唯一的。 - 你不需要显式启用 jQuery DataTable 的
paging
、info
等选项,这些选项是默认启用的。 - 请考虑使用
htmlspecialchars()
函数正确编码 HTML 实体。例如,<?php echo htmlspecialchars($fet['trk']); ?>
.
您不必在提交之前在表单上制作隐藏元素,只需在提交之前销毁数据表,它将像往常一样提交所有页面上的所有复选框
$('form').on('submit', function (e) {
$('.datatable').DataTable().destroy();
});
<form action="Nomination" name="form">
<table width="100%" class="table table-striped table-bordered table-hover" id="dataTables- example">
<tbody>
<%while (rs1.next()){%>
<tr>
<td><input type="checkbox" name="aabb" value="<%=rs1.getString(1)%>" /></td>
</tr>
<%}%>
</tbody>
</table>
</form>
并添加具有正确表单 ID 和表 ID 的脚本
<script>
var table = $('#dataTables-example').DataTable({
// ... skipped ...
});
</script>
<script>
$('form').on('submit', function(e){
var $form = $(this);
table.$('input[type="checkbox"]').each(function(){
if(!$.contains(document, this)){
if(this.checked){
$form.append(
$('<input>')
.attr('type', 'hidden')
.attr('name', this.name)
.val(this.value)
);} } }); });
</script>
这是工作代码
Gyrocode.com 的好代码,但是如果您的行中还有其他一些隐藏值,您也必须在表单中创建它们。
我使用 :
var table = $('#example').DataTable({
// ... skipped ...
});
$("#buttonValidation").click(function(){
table.page.len(-1).draw();
});
它只是在屏幕上显示所有数据表,而无需分页,然后再将其发送到表单中。也许如果你想隐藏显示,你可以使用css不透明度:0(但不是显示:无(。
相关文章:
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- 如何获取所有选中复选框的所有值,然后将其提交到表单中
- 使用javascript提交表单并从字段/单选框/复选框/文本区域获取数据
- ASP MVC复选框表单提交问题
- 如何在将鼠标悬停在提交/锚点上时检查复选框是否已选中,并显示提示用户这样做的警报
- Rails 4:动态添加的复选框未提交
- 高级表单提交-单选、复选框和重定向
- 如何在提交时验证多个复选框
- 提交前验证超链接和复选框
- 为什么复选框在未选中时不提交任何数据
- 如何提交未选中复选框的值
- 如何使用javascript自动提交保存/重新填充的复选框
- 如何在提交时防止粘性复选框重置?(一页上有多个表格)
- Wordpress:提交后,我如何在搜索表单中保留市场复选框
- 通过javascript提交复选框的值
- 不带提交按钮的提交复选框状态
- 如何自动提交复选框
- 如何使用jQuery DataTables从所有页面提交复选框
- 如何通过jquery ajax提交复选框
- .net表单提交复选框标签在Internet Explorer中不工作