当服务器端数据仍在处理时,如何禁用表头的排序?

时间:2010-10-21 10:23:11

标签: jquery sorting datatables

我在做server side sorting in datatable plugin。加载数据需要4-5秒,同时如果用户点击其他标题,它将再次触发AJAX调用。

当服务器端数据仍处于处理状态时,如何限制用户?是否有任何初始功能,我可以检查自定义标志状态&停止可排序直到处理完成?

4 个答案:

答案 0 :(得分:2)

首次收到请求时,请禁用该按钮。然后在服务器完成时触发的回调函数中启用该按钮。你就是这样做的,但如果你想要代码,那就给代码。

答案 1 :(得分:1)

快速提示:

  • 设置async: false
  • 禁用排序按钮
  • 在成功请求后启用它们

答案 2 :(得分:0)

如果内存正确地为我服务,jquery有3个函数,如ajaxStart()ajaxError()ajaxComplete()

只需在ajaxStart时禁用整个网格/网格标题,并在ajaxError(可以执行某些错误处理)或ajaxComplete时再次启用它。

答案 3 :(得分:-1)

有多种方法可以做到这一点,最简单的方法取决于您的代码。

$(document).ajaxSend( function(){
   $('controls_selector').hide();
}).ajaxComplete( function(){
   $('controls_selector').show();
});

这样做会有效,但这会在页面上的任何ajax事件期间禁用它们。该文档描述了如何使用回调函数的参数来确定ajax调用的性质并有选择地显示/隐藏这些元素。

通过这种方式,您可以避免深入挖掘并使用插件代码。

更新

关键点似乎是你不想隐藏元素,你想要一种暂时禁用事件处理程序的方法,因为它们被埋在数据表中你不想修改它们。我会做以下事情:

var tableheadclone = $('#mytableid thead>tr>th').clone(true);

然后将该克隆写入其他地方并将其隐藏(或将其保存在全局js变量中)。然后你可以使用

$('#mytableid thead>tr>th').unbind('click');

删除事件处理程序。

您可以使用replaceWith() jQuery函数重新启动事件处理程序。