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

发布于 2024-09-28 20:59:18 字数 238 浏览 4 评论 0原文

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

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

I'm doing the server side sorting in datatable plugin. Data takes 4-5 seconds to load, in the mean time if the user clicks on other headers it will again trigger the AJAX call.

How can I restrict the user when the servers side data is still in processing state? Is there any initial function where I can check custom Flag status & stop the sortable till processing is done?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

自由如风 2024-10-05 20:59:18

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

When you first get the request, disable the button. Then enable the button in a callback function which is triggered when the server finishes. That's how you'd do it, but if you want code, then give code.

烟织青萝梦 2024-10-05 20:59:18

只是一个快速提示:

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

Just a quick tip:

  • set async: false
  • disable sorting buttons
  • enable them upon successful request
九命猫 2024-10-05 20:59:18

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

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

If memory serves me correctly jquery has 3 functions like ajaxStart(), ajaxError() and ajaxComplete().

Simply disable the whole grid/just the grid header when ajaxStart and enable it again when either ajaxError (where you can do some error handling) or ajaxComplete.

云柯 2024-10-05 20:59:18

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

$(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 函数重新设置事件处理程序。

There are a variety of ways to do this, the easiest will depend on your code.

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

This will do it, however this will disable them for the duration of any ajax event on your page. The documentation describes how you can use the callback function's parameters to determine the nature of the ajax call and selectively show/hide those elements.

This way you can avoid digging in and playing with the code for the plugin.

Update

The sticking point seems to be that you don't want to hide the elements, you want a way to temporarily disable the event handlers and since they are buried in datatables you don't want to modify them. I would do the following:

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

then write that clone somewhere else and hide it (or keep it in a global js variable). You can then use

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

to remove the event handler.

You can re-instate the event handler using the replaceWith() jQuery function.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文