各行の最初のセル(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から非表示の行を削除します。フォームが送信されると、表示されているチェックボックスのデータのみがサーバーに送信されます。
フォームの送信時に、チェックされ、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)
);
}
}
});
});
_
_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
を使用しないでください。この属性は一意であると想定されています。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 opacity:0を使用できます(display:noneは使用できません)。