Jquery 在等待ajax响应时,如何防止用户交互?

Jquery 在等待ajax响应时,如何防止用户交互?,jquery,ajax,Jquery,Ajax,我正在使用jQuery实现一些ajax特性。例如:当用户单击按钮获取数据时,jQuery将调用ajax函数从服务器获取一些数据。这个过程可能需要一些时间,所以我添加了.ajaxSend和.ajaxComplete函数来显示等待过程的一些动画,实际上是在一个div中“加载数据”gif,其中z-index:999位于该div中其他div的顶部 在等待“加载数据”的过程中,我希望防止用户单击其他按钮,例如:我有其他选项卡,小的“加载数据”gif下方的按钮。 我实现这一目标的方法是: $(&qu

我正在使用jQuery实现一些ajax特性。例如:当用户单击按钮获取数据时,jQuery将调用ajax函数从服务器获取一些数据。这个过程可能需要一些时间,所以我添加了.ajaxSend和.ajaxComplete函数来显示等待过程的一些动画,实际上是在一个div中“加载数据”gif,其中z-index:999位于该div中其他div的顶部

在等待“加载数据”的过程中,我希望防止用户单击其他按钮,例如:我有其他选项卡,小的“加载数据”gif下方的按钮。 我实现这一目标的方法是:

    $("body").ajaxSend(function()
     {
        $(this).append('<div id="loading">Data Loading<\/div>');
        $("div#error").remove();
        $(this).children().not('#loading').css({'opacity':0.22});   
     });
    $("body").ajaxComplete(function()
     {
        $("div#loading").remove();
        $(this).children().not('#loading').css({'opacity':1});
     });
然而,我不认为改变不透明度是最好的方法。除非将不透明度设置为0,否则用户仍可以单击其他按钮/选项卡。我不知道如何在这个过程中完全避免任何用户交互?

使用覆盖


使z索引高于任何其他索引的div可见。把它藏起来


对于IE6,考虑选择输入的可见性

,我过去使用JQuery块UI,取得了很好的成功。可以很好地使用Ajax:

可能值得使用这样的插件,而不是手工编写类似的解决方案。

请参阅的答案。

我在上使用了一个变体。本质上,他用一个可以记录传出ajax请求的对象包装jQuery$.ajax调用


当ajax请求发出时,记录请求名称。如果有更多的请求试图以相同的名称发出,您不会执行它,也不会向用户提供消息

我试图得到一个类似问题的答案,结果我来到了这里。我知道这是一个老问题,但我想指出的是,通过浏览器检查器可以轻松删除放置在要阻止交互的元素上的覆盖


在我看来,解决这一问题的最佳方法是为整个页面设置一个全局布尔变量,并在ajax至少没有运行敏感操作时在页面上执行操作,或者关闭对ajax的异步调用,因为事实上,在这种情况下,您似乎不需要它,尽管我知道一些人们会因为我这么说而把我钉在十字架上。

我希望我能投票,但我会在接下来的几个小时内退出,特别是为了警告IE6和表单元素。事实上,我也在使用JqueryUI。是的,我刚试过dialog的模态选项。很容易达到我想要的方块效果。但是,是否有办法删除对话框右上角的“交叉关闭”按钮?请参阅此对话框,谢谢。我选择这个作为我的答案,因为我已经使用了JqueryUI,这样我就不必只为blockUI效应导入另一个插件。这个插件在这方面效果很好,但我不想在这个阶段导入太多插件。无论如何,谢谢你。如果我找不到一个更简单的解决方案,我以后可能会转向BlockUI。