分页后数据表jquery点击事件不起作用

Posted

技术标签:

【中文标题】分页后数据表jquery点击事件不起作用【英文标题】:datatables jquery click event not working after pagination 【发布时间】:2016-04-23 20:39:32 【问题描述】:

我正在使用http://datatables.net/

<button class='btn btn-success activeAccount'>Activate Account</button>

我在onclick事件上触发ajax调用,下面是ajax调用代码:

$(".activeAccount").click(function() 
  var intCounselorId = $(this).parent().parent().find('input[class="counselorId"]').attr("value");
  var intOwnerId = $(this).parent().parent().find('input[class="userID"]').attr("value");
  var strAction = 'activateAccount';
  performAction(intCounselorId, intOwnerId, strAction);
);

function performAction(intCounselorId, intOwnerId, strAction) 
  $.ajax(
      url: '/admin/counselormanagement/expertmanagementgridaction',
      data: 'intCounselorId='+intCounselorId+'&intOwnerId='+intOwnerId+'&strAction='+strAction,
      type: "POST",
      async:false,
      success: function(intFlag) 
        if(intFlag == 1)
          location.reload();
        
      
  );

我正在尝试运行一个在第一页上正常工作的 onclick 事件,但一旦我进入第 2 页(或任何其他页面),它就会停止工作。

我正在使用 jquery-1.10.2.min.js 和 1.9.4 版本的数据表

【问题讨论】:

.activeAccount 按钮是否在表格内容中?另外,请注意使用async: false 是非常糟糕的做法,并且成功处理程序中的location.reload() 完全否定了首先发出AJAX 请求的全部意义。 是的,在表格内容下 在这种情况下,您需要根据@squaleLis 的回答使用委托事件处理程序。不过,您真的应该摆脱 async: falselocation.reload() 我已经在这里给出了答案。 ***.com/questions/25575996/…你可能会看到这个。 @Md.HarunOrRashid 提出的解决方案真的很有帮助 【参考方案1】:

因为事件仅附加到现有元素。

你应该把它改成:

$("#tableId").on("click", ".activeAccount", function()
   // your code goes here
);

阅读jQuery.on的文档了解更多信息。

【讨论】:

@sarower-jahan 谢谢 :) 谢谢,这真的很有帮助。 在我的例子中,在点击事件之前 "$(".each_player").click(function() // 我的代码在这里 );"修改后 "$("#playerGroupUI").on("click", ".each_player", function() // 我的代码放在这里 );" 这触发了多次而不是一次!?页面上有 10 个删除图标,单击一个删除确认被触发两次【参考方案2】:
$(document).on("click",".activeAccount",function(e)
 // your code goes here
);

【讨论】:

【参考方案3】:

我有同样的问题。每次我的 AJAX 函数(modalContentAjaxRefresh)更新表时分页停止。所以我只需要更改我的代码:

发件人:

$('.modal-toggle').off('click', modalContentAjaxRefresh).on('click', modalContentAjaxRefresh);

到:

$('#DataTables_Table_0_wrapper').on("click", ".modal-toggle", modalContentAjaxRefresh);

我在数据表中的按钮是:

modal-toggle" 数据样式=“放大” href="/setting/account/account_turn.uuid/update" data-toggle="modal" data-target="#editAccount" wecare-method="GET">

【讨论】:

【参考方案4】:

正如@squaleLis 所说,该事件仅附加到现有元素。

所以,在我的例子中,我为按钮定义了 onclick 事件并调用它。

  <button class='btn btn-success activeAccount' onclick="YourMethod();">Activate Account</button>

  function YourMethod() 
     ....same code..
  

【讨论】:

【参考方案5】:
$("#product-list").on("click",".btn-delete-product",function(e)
    e.preventDefault();
    var prodId     =   $(this).attr("product-id"); 
    .... code to delete the record from the db...
  );

product-list 是加载数据并启用分页的表。

这对我来说非常适合。

【讨论】:

【参考方案6】:

最重要的是在点击分页时重新分配元素。

//function to assign event
var assign_actions = function()
  //Some code  

  //when the page is ready
  $( document ).ready(function() 
    assign_actions();
    //Code to assign event when paginate
     $('.paginate_button').on('click', function()
       assign_actions();
     );
   );

【讨论】:

以上是关于分页后数据表jquery点击事件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

jquery在ajax新加入的元素后绑定事件click

带有分页和排序的表格内的 Material UI 菜单按钮在第二页后不起作用

数据表 - Jquery 在分页中的数据表中不起作用

jquery数据表分页不起作用

jQuery:为啥我在 li 元素上的点击事件不起作用?

jquery数据表服务器端分页不起作用