在AJAX请求时禁用按钮

时间:2011-01-07 04:23:24

标签: ajax jquery-ui jquery

点击后我试图禁用按钮。我试过了:

$("#ajaxStart").click(function() {
    $("#ajaxStart").attr("disabled", true);
    $.ajax({
      url: 'http://localhost:8080/jQueryTest/test.json',
      data: {
        action: 'viewRekonInfo'
      },
      type: 'post',
      success: function(response){
        //success process here                             
        $("#alertContainer").delay(1000).fadeOut(800);
       },
      error: errorhandler,
      dataType: 'json'
    });    
    $("#ajaxStart").attr("disabled", false);
});

但按钮未被禁用。当我删除$("#ajaxStart").attr("disabled", false);时,该按钮被禁用。

虽然这没有按预期工作,但我认为代码序列是正确的。任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:37)

$("#ajaxStart").attr("disabled", false);放在成功函数中:

$("#ajaxStart").click(function() {
    $("#ajaxStart").attr("disabled", true);
    $.ajax({
        url: 'http://localhost:8080/jQueryTest/test.json',
        data: { 
            action: 'viewRekonInfo'
        },
        type: 'post',
        success: function(response){
            //success process here
            $("#alertContainer").delay(1000).fadeOut(800);

            $("#ajaxStart").attr("disabled", false);
        },
        error: errorhandler,
        dataType: 'json'
    });
});

这将确保在数据加载后将禁用设置为false ...当前您在同一点击功能中禁用并启用该按钮,即同时。

答案 1 :(得分:5)

在您的代码中,您只需禁用&启用相同按钮上的按钮,单击,。

您必须在完成AJAX调用

内启用它

类似这样的事情

           success: function(response){
                    $("#ajaxStart").attr("disabled", false); 
                       //success process here
                       $("#alertContainer").delay(1000).fadeOut(800);
                   },

答案 2 :(得分:3)

我通过定义两个jquery函数解决了这个问题:

var showDisableLayer = function() {
  $('<div id="loading" style="position:fixed; z-index: 2147483647; top:0; left:0; background-color: white; opacity:0.0;filter:alpha(opacity=0);"></div>').appendTo(document.body);
  $("#loading").height($(document).height());
  $("#loading").width($(document).width());
};

var hideDisableLayer = function() {
    $("#loading").remove();
};

第一个函数在所有内容之上创建一个图层。该图层为白色且完全不透明的原因是,IE允许您点击它。

在做我的ajax时,我喜欢这样:

$("#ajaxStart").click(function() {          
   showDisableLayer(); // Show the layer of glass.
   $.ajax({              
      url: 'http://localhost:8080/jQueryTest/test.json',              
      data: {                   
          action: 'viewRekonInfo'              
      }, 
      type: 'post',              
      success: function(response){                  
         //success process here                  
         $("#alertContainer").delay(1000).fadeOut(800);                                     
         hideDisableLayer(); // Hides the layer of glass.
      },
      error: errorhandler,              
      dataType: 'json'          
   });      
}); 

答案 3 :(得分:2)

我通过使用ajax的全局函数

解决了这个问题
            $(document).ajaxStart(function () {
            $("#btnSubmit").attr("disabled", true);
        });
        $(document).ajaxComplete(function () {
            $("#btnSubmit").attr("disabled", false);
        });

这里是文档link

答案 4 :(得分:1)

$.ajax()调用“不会阻止” - 这意味着它会立即返回,然后立即启用该按钮,因此该按钮不会被禁用。

使用complete:{{1}}时,您可以在AJAX成功,出错或完成后启用该按钮:http://api.jquery.com/jQuery.ajax/

  

完成(XMLHttpRequest的,   textStatus)

     

一个功能   请求完成时调用   (在成功和错误回调之后   执行)。该函数被传递   两个参数:XMLHttpRequest   对象和分类的字符串   请求的状态(“成功”,   “notmodified”,“error”,“timeout”或   “parsererror”)。这是一个Ajax事件。