Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/06/2022, à 07:24

iznobe

[ resolu ] javascript soucis de codage

Bonjour , je me penche en ce moment sur un bout de code en javascript que je n' arrive pas a faire fonctionner , et ne comprends pas comment je devrais coder pour que ca fonctionne , voici le code qui ne fonctionne pas ( enfin il fonctionne mais ne fais pas ce que j' en attends )  :

const arr =[2, 3, 4, 5, 6, 7, 21, 22];
var length = arr.length;
for( var j = 0; j < length; j++ ) {
	var bouton_a = document.getElementById("button_"+j);
	bouton_a.indice=j;// ajout d’un indice à l’objet html
	bouton_a.addEventListener("click", function () {
		test_appui(this.indice);//Lorsqu'une fonction est utilisée comme gestionnaire d'événement (event handler), le this correspondant prendra la valeur de l'élément ayant déclenché l'événement
	} );
}

la variable j , devrait representée les valeurs du tableau , ce qui n' est pas le cas avec une boucle for je suppose , qui demarre a 0 et fini a n-1 nombre d ' elements , donc ici 7 au lieu de 22 comme j' aimerais .

je tente donc d ' utiliser une boucle "foreach" a la place , mais les exemples sur internet ne sont franchements pas trop bien fait . Apres j' avoue que je ne maitrise pas le javascript tongue .

j ' ai tenté ca et pas mal d ' autre chose en me basant sur les examples trouvé ci et là qui semblaient a peu pres correspondre a ce que je cherche a faire , mais pas facile quand on n' y comprend rien :

foreach (arr.element => var j) {
	var bouton_a = document.getElementById("button_"+j);
	bouton_a.indice=j;// ajout d’un indice à l’objet html
	bouton_a.addEventListener("click", function () {
		test_appui(this.indice);//Lorsqu'une fonction est utilisée comme gestionnaire d'événement (event handler), le this correspondant prendra la valeur de l'élément ayant déclenché l'événement
	} );
	
}

et ca:

arr.foreach(j, this) {
var bouton_a = document.getElementById("button_"+j);
	bouton_a.indice=j;// ajout d’un indice à l’objet html
	bouton_a.addEventListener("click", function () {
		test_appui(this.indice);//Lorsqu'une fonction est utilisée comme gestionnaire d'événement (event handler), le this correspondant prendra la valeur de l'élément ayant déclenché l'événement
	} );
}

ne marche pas non plus .

le code php qui va avec :

	<?php		
			$bouton_array = [ 2 => "cuisine", 3 => "salle a manger", 4 => "salon", 5 => "salle TV", 6 => "salle de bains", 7 => "bureau", 21 => "chambre parents", 22 => "chambre lucie"];
				 
			
			foreach ($bouton_array as $i => $value) {
				
				$z==0;
				$z ++;
				
				if ($z % 9 == 0) {echo("<br />");}	//retour à la ligne après avoir affiché l'image numéro 8
				
				//lire l'état des sorties
				unset($status);//je détruis la variable pour remettre le tableau index à 0
				system("gpio mode ".$i." out");
				exec ("gpio read ".$i, $status);// si tableau déjà existant, exec rajoute une ligne dans tableau c'est la raison j'ai détruit cette variable.
				
				//si la sortie est à l'état 0 on affiche image rouge avec off
				if ($status[0] == 1 ) {
				    echo ("<img id='button_".$i."' src='data/img/green/".$value.".png' alt='on'/>");
				}
				//si la sortie est à l'état 1 on affiche image verte avec on
				elseif ($status[0] == 0 ) {
				    echo ("<img id='button_".$i."' src='data/img/red/".$value.".png' alt='off'/>");
				}
				else {} // on ne fait rien .
			}
		
	?> 

et le code source de la page obtenue :

<img id='button_2' src='data/img/green/cuisine.png' alt='on'/><img id='button_3' src='data/img/green/salle a manger.png' alt='on'/><img id='button_4' src='data/img/green/salon.png' alt='on'/><img id='button_5' src='data/img/green/salle TV.png' alt='on'/><img id='button_6' src='data/img/green/salle de bains.png' alt='on'/><img id='button_7' src='data/img/green/bureau.png' alt='on'/><img id='button_21' src='data/img/green/chambre parents.png' alt='on'/><img id='button_22' src='data/img/green/chambre lucie.png' alt='on'/> 

si quelqu un sait comment s ' y prendre pour avoir une boucle fonctionnelle , ca serait super de m' aiguiller .
D ' avance merci .

Dernière modification par iznobe (Le 18/06/2022, à 12:15)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#2 Le 18/06/2022, à 11:56

MicP

Re : [ resolu ] javascript soucis de codage

Bonjour

… la variable j , devrait representée les valeurs du tableau , …

Si j'ai bien compris, tu voudrais que dans ta boucle for
la variable j prenne successivement la valeur de chacun des éléments contenus dans le tableau arr
donc :

const arr = [2, 3, 4, 5, 6, 7, 21, 22];

for (const j of arr) {
…

Dernière modification par MicP (Le 18/06/2022, à 11:59)

Hors ligne

#3 Le 18/06/2022, à 12:15

iznobe

Re : [ resolu ] javascript soucis de codage

Salut MicP , ca marche impec !

un grand merci a toi , ca fait deux demi-journées que je passe a chercher ....

c' est donc une boucle for ...of , et pas une boucle foreach qu ' il fallait utiliser .
je regarderais plus en detail les exemples a ce sujet .

Dernière modification par iznobe (Le 18/06/2022, à 12:18)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#4 Le 18/06/2022, à 12:37

soshy

Re : [ resolu ] javascript soucis de codage

Sinon, tu peux aussi utiliser le style programmation fonctionnelle qui est un foreach


[2, 3, 4, 5, 6, 7, 21, 22].forEach((item, index) => {

    // ici item vaut successivement 2 3 4 5 6 7 21 et 22
    // et index 0 1 2 3 4 5 6 7
});

C'est dommage, t'étais pas si loin avec ton 3ème essai tongue

Dernière modification par soshy (Le 18/06/2022, à 12:41)

Hors ligne

#5 Le 18/06/2022, à 12:48

MicP

Re : [ resolu ] javascript soucis de codage

Ah Ouiiiiii big_smile

avec la méthode forEach d'un tableau, en plus de l'item ça donne aussi un index cool

Dernière modification par MicP (Le 18/06/2022, à 13:05)

Hors ligne

#6 Le 18/06/2022, à 13:08

iznobe

Re : [ resolu ] javascript soucis de codage

@soshy , j ' avais vu cette page dans mes recherches , une des 1eres d' ailleurs .
mais avec la methode que tu proposes , je n' arrive pas a faire fonctionner le script .
je suis vraiment trop debutant avec le javascript ...

En tout cas merci pour votre aide wink

Dernière modification par iznobe (Le 18/06/2022, à 13:10)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#7 Le 18/06/2022, à 14:31

MicP

Re : [ resolu ] javascript soucis de codage

Essaye comme ça :

[2, 3, 4, 5, 6, 7, 21, 22].forEach((item, index) => {
	var bouton_a = document.getElementById("button_" + j);
	bouton_a.indice = j; // ajout d’un indice à l’objet html
	bouton_a.addEventListener("click", function () {
		test_appui(this.indice); // Lorsqu'une fonction est utilisée comme gestionnaire d'événement (event handler), le this correspondant prendra la valeur de l'élément ayant déclenché l'événement
	});
});

Dernière modification par MicP (Le 18/06/2022, à 14:32)

Hors ligne

#8 Le 18/06/2022, à 16:16

iznobe

Re : [ resolu ] javascript soucis de codage

quelle est la difference avec la proposition de @soshy ?


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#9 Le 18/06/2022, à 19:36

MicP

Re : [ resolu ] javascript soucis de codage

C'est celle de soshy
étant donné que tu as écrit :

Dans son message #6, iznobe a écrit :

…avec la methode que tu proposes , je n' arrive pas a faire fonctionner le script . …

Dernière modification par MicP (Le 18/06/2022, à 19:39)

Hors ligne

#10 Le 19/06/2022, à 07:04

iznobe

Re : [ resolu ] javascript soucis de codage

Bonjour , comme je le disais , y a quelquechose qui fait que ca ne fonctionne pas , j ' ai tenté de remplacer aussi les variables j par item dans le reste du code , mais resultat identique .

c ' est juste pour information , vu que avec la methode que tu m' as proposé cela fonctionne .

Dernière modification par iznobe (Le 19/06/2022, à 07:04)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#11 Le 19/06/2022, à 10:45

MicP

Re : [ resolu ] javascript soucis de codage

C'est assez frustrant, la méthode forEach des tableaux semblait tellement plus élégante,
mais bon, si ça fonctionne avec une boucle for, c'est déjà ça.

Hors ligne