Флажок iCheck становится недоступным после применения разбиения на страницы

#javascript #php #jquery #pagination #icheck

Вопрос:

Я пытаюсь создать разбиение на страницы для динамических таблиц с данными из базы данных. Что я сделал, так это сначала загрузил все записи и разбил результат на страницы. Разбиение на страницы работает, однако флажок становится недоступным.

Я предполагаю, что это из-за того, как я сохранил все tr в массиве, чтобы отобразить его.

HTML

Кнопки

 lt;div class="btn-group float-right"gt;  lt;button class="btn btn-white btn-sm btn-prev"gt;lt;i class="fa fa-arrow-left"gt;lt;/igt;lt;/buttongt;  lt;button class="btn btn-white btn-sm btn-next"gt;lt;i class="fa fa-arrow-right"gt;lt;/igt;lt;/buttongt; lt;/divgt;  

Стол

 lt;table class="table table-hover table-mail"gt;  lt;tbodygt;  lt;?php   if(!empty($mails)){  foreach($mails as $key) {  $isRead = ($key['isRead'] == 0) ? "unread" : "read";  $isImportant = ($key['isImportant'] == 1) ? "lt;span class='float-left text-warning important'gt;lt;i class='fa fa-star'gt;lt;/igt;lt;/spangt;" : "";  ?gt;  lt;tr class="lt;?php echo $isRead; ?gt;" data-id="lt;?php echo $key['mailID']; ?gt;"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=lt;?php echo $key['mailID']; ?gt;"gt;lt;?php echo $isImportant; ?gt;amp;nbsp;lt;?php echo ucwords(strtolower($guiClass-gt;e($key['name']))); ?gt;lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=lt;?php echo $key['mailID']; ?gt;"gt;lt;?php echo mb_strimwidth(ucfirst($guiClass-gt;e($key['subject'])), 0, 60, "..."); ?gt;lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;lt;?php echo time_passed(date(strtotime($key['created_at']))); ?gt;lt;/tdgt;  lt;/trgt;  lt;?php }}else{ ?gt;  lt;trgt;  lt;td class="text-center"gt;No Messageslt;/tdgt;  lt;/trgt;  lt;?php } ?gt;  lt;/tbodygt; lt;/tablegt;  

JS

 lt;scriptgt;  $(document).ready(function(){  $(".i-checks").iCheck({  checkboxClass: "icheckbox_square-green",  radioClass: "iradio_square-green",  });   // Pagination  var current_page = 1;  var records_per_page = 10;  var records = $(".table-mail").find("tbody").find("tr").length;  var data = [];    $(".mail-box")  .find("table")  .find("tbody")  .find("tr")  .each(function () {  data.push($(this).prop("outerHTML"));  });    function prevPage() {  if (current_page gt; 1) {  current_page--;  changePage(current_page);  }  }  function nextPage() {  if (current_page lt; numPages()) {  current_page  ;  changePage(current_page);  }  }  function numPages() {  return Math.ceil(records / records_per_page);  }    function changePage(page) {  var table = $(".table-mail").find("tbody");    if (page lt; 1) page = 1;  if (page gt; numPages()) page = numPages();    table.html("");    for (  var i = (page - 1) * records_per_page;  i lt; page * records_per_page;  i    ) {  table.append(data[i]);  }  }    $(".btn-next").click(function () {  nextPage();  });    $(".btn-prev").click(function () {  prevPage();  });    changePage(1);  }); lt;/scriptgt;  

Интерфейс

Редактировать

Основываясь на некоторых комментариях, повторная инициализация iCheck-это правильный путь. Но это все еще не работает (по крайней мере, в моем текущем коде).

В целях тестирования я попытался жестко закодировать tr s, используя приведенный ниже код, и использовал его для добавления в тело, и это сработало. Я также добавил повторную инициализацию iCheck в этом тесте.

 for (var i = 0; i lt; records; i  ) {  tr[i] =  "lt;tr class='read' data-id='"    i    "'gt;lt;td class='check-mail'gt;lt;input type='checkbox' class='i-checks mail' autocomplete='off'gt;lt;/tdgt;lt;td class='mail-contact'gt;lt;a href='mail_detail.php?id=1'gt;amp;nbsp;John Doelt;/agt;lt;/tdgt;lt;td class='mail-subject'gt;lt;a href='mail_detail.php?id=1'gt;This is a subject "    i    "lt;/agt;lt;/tdgt;lt;td class='text-right mail-date'gt;2 hours agolt;/tdgt;lt;/trgt;"; }  

Итак, как и мое первое предположение, я думаю, что проблема заключается в том, как я получаю все данные, сохраняю их в массиве, называемом данными, и отображаю их обратно. Есть какие-либо предложения о том, как мне правильно получить все tr?

Комментарии:

1. Здравствуйте, вы пробовали сначала инициализировать их? или после заполнения таблицы вам нужно инициализировать их обратно, потому что icheck, возможно, был уничтожен.

2. Я думаю, это происходит потому, что исходные флажки уничтожаются во время разбиения на страницы, и вы теряете всех слушателей событий. Обычно это предотвращается делегированием событий на родительском сервере, но поскольку вы инициализируете их с помощью плагина, лучше звонить $(".i-checks").iCheck() после каждой разбиения на страницы.

3. Я добавил повторную инициализацию, но она все еще не работает. Я думаю, это из-за того, как я получаю все trs и сохраняю их в массиве. Поищите мою правку

Ответ №1:

Как отметили ребята в комментариях, вам необходимо повторно инициализировать компоненты icheck после разбиения на страницы, поэтому лучше добавить приведенный ниже код в конце changePage функции :

 $(document).ready(function() {  // Pagination  var current_page = 1;  var records_per_page = 10;  var records = $(".table-mail").find("tbody").find("tr").length;  var data = [];   $(".mail-box")  .find("table")  .find("tbody")  .find("tr")  .each(function() {  data.push($(this).prop("outerHTML"));  });   function prevPage() {  if (current_page gt; 1) {  current_page--;  changePage(current_page);  }  }   function nextPage() {  if (current_page lt; numPages()) {  current_page  ;  changePage(current_page);  }  }   function numPages() {  return Math.ceil(records / records_per_page);  }   function changePage(page) {  var table = $(".table-mail").find("tbody");   if (page lt; 1) page = 1;  if (page gt; numPages()) page = numPages();   table.html("");   for (  var i = (page - 1) * records_per_page; i lt; page * records_per_page; i    ) {  table.append(data[i]);  }   $(".i-checks").iCheck({  checkboxClass: "icheckbox_square-green",  radioClass: "iradio_square-green",  });   }   $(".btn-next").click(function() {  nextPage();  });   $(".btn-prev").click(function() {  prevPage();  });   changePage(1); }); 
 lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"gt;lt;/scriptgt; lt;script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/js/bootstrap.min.js"gt;lt;/scriptgt; lt;link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" /gt; lt;script src="https://cdnjs.cloudflare.com/ajax/libs/iCheck/1.0.3/icheck.min.js"gt;lt;/scriptgt; lt;link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" rel="stylesheet" /gt; lt;link href="https://cdnjs.cloudflare.com/ajax/libs/iCheck/1.0.3/skins/all.min.css" rel="stylesheet" /gt; lt;div class="mail-box"gt;  lt;div class="btn-group float-right"gt;  lt;button class="btn btn-white btn-sm btn-prev"gt;lt;i class="fa fa-arrow-left"gt;lt;/igt;lt;/buttongt;  lt;button class="btn btn-white btn-sm btn-next"gt;lt;i class="fa fa-arrow-right"gt;lt;/igt;lt;/buttongt;  lt;/divgt;   lt;table class="table table-hover table-mail"gt;  lt;tbodygt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 1lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 1lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 1lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 1lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 1lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 1lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 1lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 1lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 1lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 1lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 1lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 2lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 2lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 2lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 2lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 2lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 2lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 2lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 2lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 2lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 2lt;/tdgt;  lt;/trgt;  lt;tr class="read" data-id="1"gt;  lt;td class="check-mail"gt;  lt;input type="checkbox" class="i-checks mail" autocomplete="off"gt;  lt;/tdgt;  lt;td class="mail-contact"gt;lt;a href="mail_detail.php?id=1"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="mail-subject"gt;lt;a href="mail_detail.php?id=2"gt;PAGE 2lt;/agt;lt;/tdgt;  lt;td class="text-right mail-date"gt;PAGE 2lt;/tdgt;  lt;/trgt;  lt;/tbodygt;  lt;/tablegt; lt;/divgt; 

Комментарии:

1. Я добавил повторную инициализацию, но она все еще не работает. Я думаю, это из-за того, как я получаю все trs и сохраняю их в массиве. Поищите мою правку

2. Можете ли вы показать нам mail-box структуру таблицы

3. почтовый ящик-это просто оболочка div .table-mail. Теперь я указал саму таблицу.

4. Проверьте обновление с помощью рабочего примера.

5. Спасибо! Наконец — то это работает. Я заметил, что инициализация iCheck в верхней части скрипта приводит к тому, что флажки не могут быть установлены. Поэтому я удалил его и перенес инициализацию на после каждой разбивки на страницы-это решение. Большое спасибо.