【问题标题】:Cannot retain checkbox value using jquery.cookie无法使用 jquery.cookie 保留复选框值
【发布时间】:2016-10-06 07:07:37
【问题描述】:

我使用jQuery DataTable,工具栏上有一个checkbox,用于检索所有记录与否。由于DataTablestateSave 功能无法正常工作,我尝试使用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


【解决方案1】:

在您的情况下没有理由使用$.cookie。在复选框change 事件中,您可以简单地存储选中状态的值,并使用它来设置重新加载表格时生成的新复选框的checked 属性

var isChecked;
$(document).on('change', '#cbIsAll', function () {
    // Store the current value
    isChecked = $(this).is(':checked');
    ....

然后在数据表的回调函数中,设置复选框的选中状态

$('#cbIsAll').prop('checked', isChecked);

【讨论】:

  • 这是智能且快速的解决方案,是解决此问题的最佳方法之一。非常感谢您提供有用的提示和帮助...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 2017-01-27
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多