se passer d'un SetTimeout dans Jquery

sff

WRInaute impliqué
Bonjour,

je souhaite savoir si cela est possible de se passer du SetTimeout que j'ai été obligé d'appliquer, car sinon lors du clic sur le bouton, le data apparait directement et les effets s'execute ensuite, ce que je ne veut évidement pas avoir. Je souhaite une chronologie comme ceci :

Clic
Fadeout du contenu actuel
Fadein du data

La chronologie actuelle est comme cela

Clic
Affichage du data (pas de fadein)
Fadeout du data
Fadein du data

Code:
//Form block parameters
$("#button_parameters_basics").click(function() {

	$("#button_parameters_basics").attr("disabled", true);
	$('#form_parameters').delay(0).fadeOut(500);
	
	setTimeout(function () {
		$.ajax({
type: 'POST',
url: '?mod=parameters_basics',
data: { 
referrer: $('#referrer').val(),
proxy: $('#proxy').val()
			},
success: function(data){
				
				$('.form').empty().hide().delay(500).fadeIn(500).append(data);
			}
		});
	}, 500);
	
	return false;
});

Le setTimeout permet de bloquer pendant une demi seconde le data afin que le Fadeout s'execute normalement.

Y a t'il une autre solution ?

Merci
 

niap

WRInaute discret
Oui, tu peux ajouter un callback sur la fonction fadeOut. Ca évitera tout tes delay.
Code:
$("#monBloc").fadeOut(500, function(){
// ici place la requette ajax
// elle sera appellé une fois le fadeOut terminé
});


Code:
$('.form').empty().hide().delay(500).fadeIn(500).append(data);
Plutôt que d'effacer, masquer, attendre, faire un fondu et ajouter les données, tu peux masquer, remplacer les données, faire ton fondu
Code:
$('.form').hide().html(data).fadeIn(500);
A testé, j'ai pas touché jQuery depuis quelques temps, mais tu as l'idée.
 

sff

WRInaute impliqué
Oui cela fonctionne parfaitement. Je ne connaissais pas le callback, ca risque de me servir, c'est plus propre.

Merci
 

Discussions similaires

Haut