近期在項目中爲每個ajax觸發按鈕寫正在加載的效果,用的是bootstarpjquery
代碼以下ajax
$(function(){ $('.btn').bind('click',function(e){ var $btn = $(e.target) if ($btn.attr("data-loading-text")){ $("#data-loading-control").ajaxStart(function(evt, request, settings){ $btn.button('loading'); }); $("#data-loading-control").ajaxComplete(function(evt, request, settings){ $(".btn").button('reset'); }); } /*setTimeout(function(){ $btn.button('reset'); },1500);*/ }); });
在每個按鈕的點擊事件中,判斷該按鈕是否存在spa
data-loading-control屬性
例如
<button class="btn btn-primary" id="login-button" type="button" data-loading-text="正在登陸">登陸</button>
若是有的話就開始監聽ajax的start事件和complete事件,並顯示正在登錄,完成後重置按鈕的狀態code
可是後來發現只有登陸按鈕能夠正常,其餘的按鈕都不能顯示正在執行的效果blog
惟一的區別就是,登陸按鈕的時間是寫在jquery的bind中,而其餘的按鈕爲了方便都是直接寫了onclick 事件,網上說onclick事件先於bind事件執行,這樣就能解釋通了。事件
jquery在onclick事件中已經執行了ajax,而後才增長ajax的綁定監聽,因此監聽是無效的。get