我正在使用jquery datatables plugin。
我只有一个直接的html表布局。
<table class="display" id="contactsTable">
<thead>
<tr>
<th>Id</th>
<th>Email</th>
<th>Name</th>
<th>Phone</th>
<th>City</th>
<th>State</th>
<th>Arrival</th>
<th>Departure</th>
<th>Inserted</th>
<th>Check</th>
</tr>
</thead>
<tbody>
<tr>
<td>301</td>
<td>email address</td>
<td>Test</td>
<td></td>
<td></td>
<td></td>
<td>July 14 2011</td>
<td>July 23 2011</td>
<td>April 12 2011 07:05</td>
<td><input type="checkbox" name="selected[]" value="301" class="chkbox"/></td>
</tr>
<tr>
<td>300</td>
<td>email</td>
<td>Test</td>
<td></td>
<td></td>
<td></td>
<td>September 02 2011</td>
<td>September 10 2011</td>
<td>April 11 2011 12:01</td>
<td><input type="checkbox" name="selected[]" value="300" class="chkbox"/></td>
</tr>
这是我的提交代码(只是临时)。
<input id="submitButton" type="submit" value="Submit" onclick="test()" />
我的javascript将复选框映射到数组。
function test() {
var values = $('input:checkbox:checked.chkbox').map(function () {
return this.value;
}).get();
console.log(values);
}
这是数据表代码
$(document).ready(function() {
var selected;
var selectedOutput = '#selectedOutput';
var template = 'selectedTemplate';
var submitButton = '#submitButton'
var dTable = $('#contactsTable').dataTable({
"bJQueryUI": true,
"sPaginationType": "full_numbers",
"bPaginate": true,
"bLengthChange": true,
"bFilter": true,
"bSort": false,
"bInfo": true,
"bAutoWidth": false,
"bProcessing": true,
"aoColumns": [
{"bVisible": false }, //keep the id invisble
null,
null,
null,
null,
null,
null,
null,
null,
null
]
});
问题是,我无法跨页面选择复选框。该表有多页。如果我单击“提交”,它只会提交我当前页面的复选框数组。
我希望这很清楚。我不确定发生了什么。谢谢你的帮助。
答案 0 :(得分:2)
我想你可能会看一下this,它可能会解决你的问题。
这个例子可能对你有帮助,因为它似乎正是你的情况(这个使用fnGetNodes(),而在另一个链接中解释了如果第一个函数不起作用如何使用fnGetHiddenNodes()) :http://datatables.net/examples/api/form.html
答案 1 :(得分:0)
var oSettings = oTable.fnSettings();
oSettings._iDisplayLength = CHECK_BOXES_COUNT_OR_ROW_COUNT;
oTable.fnDraw();
这应该为您解决问题
答案 2 :(得分:0)
jQuery DataTables出于性能原因从DOM中删除不可见的行,这就是为什么当您提交表单时,只有可见的复选框被提交。
在提交表单时,您可能需要将已检查且在DOM中不存在的<input type="checkbox">
转换为<input type="hidden">
。
例如,要提交包含所有复选框值的表单:
var table = $('#example').DataTable();
$("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)
);
}
}
});
});
如果您通过Ajax提交表单,那就更简单了。
例如,要通过Ajax提交表单,其中包含所有复选框的值:
var table = $('#example').DataTable();
$("#btn-submit").on('click', function(e){
e.preventDefault();
$.ajax({
url: "/path/to/your/script.php",
data: table.$('input[type="checkbox"]').serialize();
}).done(function(data){
console.log("Response", data);
});
});
有关更多信息和演示,请参阅jQuery DataTables: How to submit all pages form data。