2016-10-06 12 views
0

Я использую jQuery DataTable и на панели инструментов есть checkbox, который используется для извлечения всех записей. Как stateSave особенности DataTable не работает должным образом, я пытался использовать jquery.cookie, чтобы сохранить значение флажка после перезагрузки DataTable (поскольку флажок перерисовываются динамически на каждой перезагрузке), как показано ниже:Невозможно сохранить значение флажка с помощью jquery.cookie

$(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 выполнена правильно как истина, checkbox потерял значение позже этой строки. Не могли бы вы пояснить мне, где ошибка? Или есть лучший и умный способ сохранить значение checkbox?

+0

Почему вы не используете 'prop ('checked')'? – madalinivascu

+0

Для чего же линия? –

+0

Последняя строка события изменения – madalinivascu

ответ

1

В вашем случае нет причин использовать $.cookie. В случае, если флажок change, вы можете просто сохранить значение проверяемого состояния и использовать, чтобы установить checked свойства нового флажка генерируемого при перезагрузке таблицы

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

Затем в функции обратного вызова в DataTable, установите проверено состояние флажка

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

Это умное и быстрое решение с одним из лучших подходов к этой проблеме. Большое спасибо за полезные советы и помощь ... –