ugrás a tartalomhoz

Ajax, checkbox megtartása lapozáskor.

Incomingson · 2019. Aug. 13. (K), 11.05
Hali.

Ez a probléma már régebbi. Félmegoldásokat sikerült összehoznom, de egyszerűen belekavarodok.

Az egyik script-et szépen össze lehet kapcsolni a szerver oldallal. A másikat kb annyira sikerült üzembe helyeznem hogy az oldalanként megtartotta a checkboxot. Csak kb a kettőt nem sikerült összehoznom.

Kérdés:

Ebben a scriptet melyik rész felel az oldalankénti checkbox megtartásáért? Próbáltam szétszedni a scriptet és biztosra veszem hogy a render lesz az. Azonban mégsem sikerül implementálnom.

Checkbox megtartása lapozáskor
A működő szerver oldallal de nincs checkbox megtartás lapozáskor

Az első, ahol checkbox megtartás van, de szerveroldal nincs.

$(document).ready(function (){
var userData = [
[ "1", "Email", "Alma", "Member" ],
[ "2", "Email", "Alma 2", "Member" ]
];
var table = $('#example').DataTable({
'data': userData,
'columnDefs': [{
'targets': 0,
'searchable':false,
'orderable':false,
'className': 'dt-body-center',
'render': function (data, type, full, meta){
return '<input type="checkbox" name="id[]" value="'
+ $('<div/>').text(data).html() + '">';
}
}],
'order': [1, 'asc'],
"createdRow": function(row, data, dataIndex){
$(row).attr("id", "tblRow_" + data[0]);
}
});
// Handle click on "Select all" control
$('#example-select-all').on('click', function(){
// Check/uncheck all checkboxes in the table
var rows = table.rows({ 'search': 'applied' }).nodes();
$('input[type="checkbox"]', rows).prop('checked', this.checked);
});
// Handle click on checkbox to set state of "Select all" control
$('#example tbody').on('change', 'input[type="checkbox"]', function(){
// If checkbox is not checked
if(!this.checked){
var el = $('#example-select-all').get(0);
// If "Select all" control is checked and has 'indeterminate' property
if(el && el.checked && ('indeterminate' in el)){
// Set visual state of "Select all" control
// as 'indeterminate'
el.indeterminate = true;
}
}
});
$('#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)
);
}
}
});
// FOR TESTING ONLY
// Output form data to a console
$('#example-console').text($(form).serialize());
console.log("Form submission", $(form).serialize());
// Prevent actual form submission
e.preventDefault();
});
});
A másik ami gyönyörűen működik szerver oldallal, viszont nincs checkbox megtartás:

var dataTable;
$(document).ready(function(){
// Initialize datatable
dataTable = $('#empTable').DataTable({
'processing': true,
'serverSide': true,
'serverMethod': 'post',
'ajax': {
'url':'ajaxfile.php',
'data': function(data){
// Read values
data.request = 1;
}
},
'columns': [
{ data: 'emp_name' },
{ data: 'email' },
{ data: 'gender' },
{ data: 'salary' },
{ data: 'city' },
{ data: 'action' },
],
'columnDefs': [ {
'targets': [5], // column index (start from 0)
'orderable': false, // set orderable false for selected columns
}]
});
// Check all
$('#checkall').click(function(){
if($(this).is(':checked')){
$('.delete_check').prop('checked', true);
}else{
$('.delete_check').prop('checked', false);
}
Próbáltam összehozni a kettőt de nagyon nem ment.
A segítséget előre is köszönöm.
 
1

Mi lenne, ha

Pepita · 2019. Aug. 14. (Sze), 13.00
ahelyett, hogy innen-onnan másolt (mások által valahogy kitalált) "szkriptek" hegesztgetése helyett inkább Te járnál utána, hogy mit is tud, hogyan műxik az általad használt DataTable?
Lépésről lépésre: először legyen meg js-ből a tábla kirakása, aztán legyen ajax adatlekérés, végül variálj a checkbox-okkal.
Nem szabad elfeledkezni arról sem, hogy ha a checkbox-ok a DataTable egyes soraiban vannak, akkor azoknak előbb létre kell jönniük, utána lehet eseménykezelőre feliratkozni.
A második kódban furcsa lenne, ha lenne "checkbox megtartás", mert van "checkall", ezt én logikailag nem tudom összeegyeztetni a megtartással, de lehet, hogy csak én..
Mindenesetre ilyenkor nekem az szokott beválni, ha 0-ról, apró lépésenként megcsinálom magamnak. Az idézett kódokhoz nincs DOM (HTML), így különösen nehéz lenne érdemben hozzászólni szerintem.