【发布时间】:2016-10-06 07:07:37
【问题描述】:
我使用jQuery DataTable,工具栏上有一个checkbox,用于检索所有记录与否。由于DataTable 的stateSave 功能无法正常工作,我尝试使用jquery.cookie 以在重新加载DataTable 后保留复选框值(因为每次重新加载时都会动态重绘复选框),如下所示:
$(document).ready(function() {
$('#example').DataTable( {
//code omitted for brevity
"serverSide": true,
"ajaxSource": "/Student/GetStudents",
"fnServerData": function (sSource, aoData, fnCallback) {
/* Add some extra data to the sender */
aoData.push({ "name": "isAll", "value": $("#cbIsAll").is(":checked") });
$.getJSON(sSource, aoData, function (json) {
/* Do whatever additional processing you want on the callback, then tell DataTables */
fnCallback(json);
});
},
"fnDrawCallback": function() {
$("div.toolbar").html('<input type="checkbox" id="cbIsAll" name="demo" /> Get all records');
}
});
$(document).on('change', '#cbIsAll', function () {
var isClicked = $('#cbIsAll').is(':checked') ? true : false;
$.cookie('clicked', isClicked, { expires: 1 }); // expires in 1 day
table.ajax.reload();
$('#cbIsAll')[0].checked = ($.cookie('clicked') == "true") ? true : false;
});
});
调试代码后,我看到虽然$('#cbIsAll')[0].checked 行正确执行为true,但checkbox 在此行之后丢失了值。你能澄清一下错误在哪里吗?还是有更好更聪明的方法来保持checkbox 的价值?
【问题讨论】:
-
你为什么不用
prop('checked')? -
代替哪一行?
-
更改事件的最后一行
-
如果只刷新数据表(而不是整个页面),为什么不能将值存储在 javascript 变量中并根据该变量重置值?
-
是的,我知道。但是当您选中/取消选中它时,您可以分配它的值,比如
var isAllSelected = $('#cbIsAll).is(':checked');,然后在重新加载数据表后 -$('#cbIsAll').prop('checked', isAllSelected);
标签: javascript jquery asp.net-mvc datatable jquery-cookie