2016-02-01 38 views
0

我有這樣的jQuery的結構:禁用和啓用HTML標記,以防止多次點擊

$(document).on('click', '.view-details', function() { 
    $(this).prop("disabled", true); 
    // API call1 
    // API call2 
    // API call3 
    $(this).prop("disabled", false); 
} 

我已經這樣做了禁用和啓用,以防止用戶點擊多次,這是造成多種問題。

這個問題是API調用是異步的,我不想讓它們同步。

但讓他們異步將執行Line5之前,我不想要的API調用。在每個API上啓用成功和失敗也是一個很大的努力。

任何其他更好的建議,以確保行5完成後2,3,4?

+3

見https://api.jquery.com/promise/ – fcalderan

回答

1

您可以將AJAX調用返回的延遲對象放入一個數組中,然後apply可以將$.when設置爲在所有請求都完成後啓用按鈕。試試這個:

$(document).on('click', '.view-details', function() { 
    var $el = $(this).prop("disabled", true); 
    var requests = []; 
    requests.push(request1); 
    requests.push(request2); 
    requests.push(request3); 

    $.when.apply(requests).done(function() { 
     $el.prop("disabled", false); 
    }); 
}); 
+0

'$ .when.apply(請求).done(函數(){$ el.prop(「disabled」,false); ..' – hindmost

+0

@最後謝謝,複製+粘貼失敗... –

+0

我覺得'$ el.prop(「disabled」,false);'應該是在所有**請求完成之後應用 – hindmost

2

你可以使用這樣的事情:

$.when(api1, api2, api3).done(function(){}); 
+0

這可以和api1,api2,api3一起使用,只是我需要用逗號分開它們嗎? – maverick

+0

我認爲是的。適用於各種功能 – lacexd