0

我正在数据表插件中进行服务器端排序。加载数据需要 4-5 秒,同时如果用户单击其他标题,它将再次触发 AJAX 调用。

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

4

4 回答 4

2

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

于 2010-10-21T10:26:14.897 回答
1

只是一个快速提示:

  • async: false
  • 禁用排序按钮
  • 成功请求后启用它们
于 2010-10-21T10:26:43.213 回答
0

如果我没记错的话,jquery 有 3 个函数,比如ajaxStart(),ajaxError()ajaxComplete().

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

于 2010-10-21T10:26:53.333 回答
-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 函数重新启用事件处理程序。

于 2010-10-21T10:28:23.587 回答