Я использую сценарий разбивки на страницы ajax, который отлично работает – https://github.com/gbirke/jquery_pagination
На первой странице все работает отлично, на каждой странице есть кнопки отправки (несколько форм), которые отправляют данные в базу данных через POST jquery.
Однако пост jquery работает только для форм / кнопок на первой загруженной странице. Если вы перейдете на другую страницу на странице, кнопка jquery post / submit не работает.
Любые предложения были бы высоко оценены, не могут показаться, чтобы понять это.
Фрагменты кода:
Сценарии разбиения на страницы
<script> $(document).ready(function() { $("#Pagination").trigger('setPage', [<?php echo $member_Program_Week_calc; ?>]); }); </script> <script type="text/javascript"> function pageselectCallback(page_index, jq){ var new_content = jQuery('#hiddenresult div.result:eq('+page_index+')').clone(); $('#Searchresult').empty().append(new_content); return false; } function initPagination() { // count entries inside the hidden content var num_entries = jQuery('#hiddenresult div.result').length; // Create content inside pagination element $("#Pagination").pagination(num_entries, { callback: pageselectCallback, items_per_page:1 // Show only one item per page }); } // When document is ready, initialize pagination $(document).ready(function(){ initPagination(); }); </script>
Функция ajaxSubmit
<script type="text/javascript"> $(document).ready(function() { $('#completetask_<?php the_sub_field('tasks_id'); ?>').submit(ajaxSubmit); // example function ajaxSubmit(){ $(this).find(':submit').attr('disabled','disabled'); var completetask = jQuery(this).serialize(); jQuery.ajax({ type:"POST", url: "/wp-admin/admin-ajax.php", data: completetask, success:function(data){ jQuery("#feedback").html(data); }, error: function(errorThrown){ alert(errorThrown); } }); return false; } }); </script>
Код формы
<form method="post" id="completetask_<?php echo $task_id; ?>"> <input type="hidden" name="program_id" id="program_id" value="<?php echo $program_id; ?>"/> <input type="hidden" name="session_id" id="session_id" value="<?php echo $session_id; ?>"/> <input type="hidden" name="task_id" id="task_id" value="<?php echo $task_id; ?>"/> <input type="hidden" name="action" value="completeTask"/> <input class="program_task_submit_no program_task_submit_no_<?php echo $task_id; ?>" type="submit" value="COMPLETE TASK"/> </form>
Мне удалось решить эту проблему благодаря предложению от @charlietfl и немного дальнейшему исследованию.
Решение – это делегирование событий, используя функцию .on ().
С моим кодом я изменил код функции ajaxSubmit, используя функцию .on.
Простой пример:
$(document).on('submit', '#completetask', function(e) { //CODE });
Мой обновленный код:
$(document).on('submit', '#completetask_<?php the_sub_field('tasks_id'); ?>', function(e) { $(this).find(':submit').attr('disabled','disabled'); var completetask = jQuery(this).serialize(); var css = document.createElement("style"); css.type = "text/css"; css.innerHTML = ".program_task_title_<?php the_sub_field('tasks_id'); ?> { color: green !important; }"; document.body.appendChild(css); jQuery.ajax({ type:"POST", url: "/wp-admin/admin-ajax.php", data: completetask, success:function(data){ jQuery("#feedback").html(data); }, error: function(errorThrown){ alert(errorThrown); } }); return false; });
Я удалил исходный код функции ajaxSubmit.
Работа с CSS
Мне также понадобился CSS для выполнения, как только кнопка будет отправлена, которая изменила стиль формы. Тем не менее, смена страницы сбрасывается до нормального состояния. Для этого я выполнил стили CSS в скрипте.
var css = document.createElement("style"); css.type = "text/css"; css.innerHTML = ".program_task_title_<?php the_sub_field('tasks_id'); ?> { color: green !important; }"; document.body.appendChild(css);
Благодарю.