2014-10-01 123 views
0

我有一個函數在ajax函數之外,我想在ajax運行時禁用這個「啓用」點擊功能,並在ajax成功加載後啓用它,我該如何處理這個問題?任何幫助,將不勝感激。 這裏是我的代碼:如何在ajax調用之前禁用函數,並在ajax成功啓用它?

$('enable').click(function() { 
     console.log(123); 
     $(this).css('display', 'none'); 

var xhr = $.ajax({ 
     type: "POST", 
     url: $.vp + "signup/distLookup.ashx" + "?first=" + val_f_name + "&last=" + val_l_name + "&country=" + val_country + "&language=" + $.langID, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 
      console.log(data); 

    ; 
+0

這不是一個工作片段,是嗎? – 2014-10-01 20:30:44

回答

1
var enable = true; 
$('enable').click(function() { 
    if(enable) { 
     enable = false; 
     console.log(123); 
     $(this).css('display', 'none'); 

     var xhr = $.ajax({ 
      type: "POST", 
      url: $.vp + "signup/distLookup.ashx" + "?first=" + val_f_name + "&last=" +  val_l_name + "&country=" + val_country + "&language=" + $.langID, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (data) { 
       console.log(data); 
       enable = true; 
      } 
     }); 
    } 
}); 

您可以設置使假時,Ajax是觸發。

編輯:

somthing like this?

var enable = true; 
$('enable').click(function() { 
    if(enable) { 
     console.log(123); 
     $(this).css('display', 'none'); 
    } 
}); 

function callAjax() { 
    enable = false; 
    var xhr = $.ajax({ 
     type: "POST", 
     url: $.vp + "signup/distLookup.ashx" + "?first=" + val_f_name + "&last=" +  val_l_name + "&country=" + val_country + "&language=" + $.langID, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 
      console.log(data); 
      enable = true; 
     } 
    }); 
} 
+0

謝謝,但這隻適用於當「啓用」點擊功能是這個Ajax的觸發器,如果​​我想禁用這個Ajax之外的點擊功能,該怎麼辦?這意味着,「函數1」在ajax運行時觸發ajax調用,「函數2」被禁用,然後「函數2」在成功後啓用ajax。 – 7537247 2014-10-02 19:52:43

+0

@ 7537247我編輯我的答案,檢查它是否是你需要的。 – 2014-10-02 20:21:08

+1

它的工作原理!代碼簡單,簡單,也完全合理。非常感謝。 – 7537247 2014-10-02 21:14:30

0

如果AJAX是點擊功能,那裏面:

$('enable').click(function() { 
    console.log(123); 
    $(this).hide(); 
    var that=this;   

    var xhr = $.ajax({ 
      type: "POST", 
      url: $.vp + "signup/distLookup.ashx" + "?first=" + val_f_name + "&last=" + val_l_name + "&country=" + val_country + "&language=" + $.langID, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (data) { 
       console.log(data); 
       $(that).show(); 
      } 
    }); 
}); 

其他:使用.one,而不是.on

$('enable').bind('click',function() { 
    console.log(123); 
    $(this).unbind('click'); 
}); 

    var xhr = $.ajax({ 
      type: "POST", 
      url: $.vp + "signup/distLookup.ashx" + "?first=" + val_f_name + "&last=" + val_l_name + "&country=" + val_country + "&language=" + $.langID, 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (data) { 
       console.log(data); 
       $('enable').bind('click',function() { 
        console.log(123); 
        $(this).unbind('click'); 
       }); 
      } 
    }); 
0

嘗試,然後附加上處理success

function sendRequest() { 
    var xhr = $.ajax({ 
    type: "POST", 
    url: $.vp + "signup/distLookup.ashx" + "?first=" + val_f_name + "&last=" + val_l_name + "&country=" + val_country + "&language=" + $.langID, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (data) { 
     console.log(data); 
     $('enable').one('click', sendRequest); // We restore it when get success 
    } 
} 

$('enable').one('click', sendRequest); // once you clicked your handler would be removed 
0

你可以只當你想禁用點擊事件,你可以提出一個標誌:

$('enable').click(function() { 
    if ($(this).data('disabled')) return; 

    $(this).data('disabled', true); 

    $.ajax({ ... }).always(function() { $(this).data('disabled', false); }.bind(this)); 
}); 

使用.always(),以確保當AJAX請求失敗以及它被啓用。

相關問題