Ordonner les actions dans un onclick ???

Résolu
Odeim -  
 Joe -
Bonjour,

peut on ordonner plusieurs actions réalisées dans un même attribut (onclick) d'un td ?

Je m'explique, j'ai un calendrier que j'affiche, lorsque l'on clic sur un jour, un formulaire apparait et j'aimerais que le jour sélectionné change de couleur au moment de sa sélection... Pour cela j'ai créé un CSS, je change donc la class de mon td sélectionné (un td = un jour) avec : onclick="this.className='select'" Mais ceci colore chaque jour que je sélectionne sans remettre le précédant en couleur normale...
Ce que je veux donc faire c'est rafraichir mon calendrier avant de le colorer ainsi chaque cellule est réinitialisé avant de se faire sélectionner...
Pour ce faire, j'ai essayé :
onclick="<%= remote_function(:url => {:action => 'refresh_calendar', :user => @userid}, :with => "'new_month=#{@month}&new_year=#{@year}'") %>; this.className='select'">
Ce qui est en gras est simplement l'appel de ma fonction de rafraichissement du calendrier.
Avec ce code, il exécute bien les deux actions mais il les fait dans le mauvais sens, il colore ma cellule puis il rafraichit mon calendrier...comment puis-je forcer le rafraichissement à se faire avant ? Parce que la la cellule se colore et comme il rafraichit le calendrier ensuite elle redevient comme avant.
PS: J'ai essayé d'inverser l'ordre des deux actions dans mon onclick, non ça ne change rien il fait toujours la coloration en premier...Que puis-je faire ????

4 réponses

Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Hello,

Les actions se lancent simultanément mais c'est la plus rapide qui prend la main en quelques sortes...

Tu peux donc songer à faire en sorte que ta première fonction te retourne "vrai" quand elle a finit, et tu ne lances la seconde que quand la première t'a retourné quelque chose.

Tu peux aussi utiliser une file : https://www.commentcamarche.net/faq/32778-les-piles-et-les-files-en-javascript
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
donc comme ça

function lance(){
	if(fonction_1()){
		fonction_2();
	}

}
//fonction 1
function fonction_1(){
	//tes instructions
	
	//puis
	return true;
}
//fonction 2
function fonction_2(){
	//tes instructions
	
	//puis
	return true;

}

<html>
	onclick="lance();"
0
Odeim
 
Ok cool ! Merci bien à vous deux, j'ai réussi à faire tourner ça :)
Merci beaucoup pour les réponses rapides !
0
Joe
 
Par ailleurs, il est plus simple de mettre des identifiants uniques sur les jours et de sauvegarder l'ancienne id sélectionné dans une variable. C'est plus propre. Comme ca tu n'as que deux actions à faire dans ton onclick, du genre:

document.getElementById( ancienID ).className = 'nonselectionne';
document.getElementById( idcourant ).className = 'selectionne';
0