我試圖讓一個按鈕,onclick將應用類loading
(將光標設置爲「等待」)的身體,然後進行一系列的ajax請求。jQuery addClass()沒有運行之前jQuery.ajax()
代碼是:
$('#addSelected').click(function(){
$('body').addClass('loading');
var products = $(':checkbox[id^=add_]:checked');
products.each(function(){
var prodID = $(this).attr('id').replace('add_', '');
var qty = $('#qty_' + prodID).val();
if($('#prep_' + prodID).val())
{
prodID += ':' + $('#prep_' + prodID).val();
}
// Have to use .ajax rather than .get so we can use async:false, otherwise
// product adds happen in parallel, causing data to be lost.
$.ajax({
url: '<?=base_url()?>basket/update/' + prodID + '/' + qty,
async: false,
beforeSend: function(){
$('body').addClass('loading');
}
});
});
});
我試着做
$('body').addClass('loading');
這兩種請求之前,作爲一個beforeSend回調,但沒有任何區別。
在螢火蟲我可以看到body
沒有得到loading
類,直到請求完成後。
任何想法?
我還沒有以我認爲是乾淨的方式排序,但我找到了解決方案。
如果我添加setTimeout(function(){
以上var products...
,和}, 1);
的products.each
塊的端部下方,該塊被延遲,所以會發生addClass第一。
什麼元素有addSelected的id?如果它是一個錨標記,它可能會導致頁面刷新。除非你在你的代碼中防止了這些。 – Samuel 2010-03-31 14:33:05
它的一個標準<輸入類型「按鈕」... /> – Josh 2010-03-31 14:36:27
在我的使用經驗** addClass()**元素必須已經有一個** class =「」**! 如果元素沒有類,則必須使用** attr()**,而不是像這樣: $('body')。attr('class','loading'); – 2010-04-01 11:51:22