J'essaie d'avoir un bouton qui onclick va appliquer une classe loading
(place le curseur sur "wait") au corps, avant de faire une série de requêtes ajax.jQuery addClass() ne fonctionne pas avant jQuery.ajax()
est:
$('#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');
}
});
});
});
J'ai essayé de faire
$('body').addClass('loading');
avant les demandes, et comme un rappel beforeSend, mais il n'y a pas de différence.
Dans firebug je peux voir que body
n'atteint pas la classe loading
jusqu'à ce que les demandes sont terminées.
Des idées? Je n'ai pas ce tri d'une manière que je considère comme propre, mais j'ai trouvé une solution.
Si j'ajoute setTimeout(function(){
ci-dessus var products...
et }, 1);
en dessous de la fin du bloc products.each
, ce morceau est en retard, donc addClass arrive en premier.
quel élément a l'ID de addSelected? S'il s'agit d'une balise d'ancrage, cela peut provoquer l'actualisation de la page. sauf si vous empêchez cela ailleurs dans votre code. – Samuel
c'est un –
Josh
Dans mon expérience pour l'utilisation ** addClass() ** l'élément doit déjà avoir un ** class =" "** dedans! Si l'élément n'a pas de classe, vous devez utiliser ** attr() ** comme suit: $ ('body'). Attr ('classe', 'chargement'); –