Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1932 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  foreach en javascript

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Page Précédente
Auteur Sujet :

foreach en javascript

n°969009
freed102
Arayashiki
Posté le 02-02-2005 à 10:34:21  profilanswer
 

J'avais cru voir que cette sorte de boucle existait en javascript mais visiblement c pas le cas... mais alors on fait comment pour utiliser les valeurs d'un tableau habituellement ???
je veux faire une tableau avec une serie de valeur (des codes hexadecimaux genre : Array("00","33","66","99","CC","FF" )
puis des boucles avec des document.write() pour afficher un tableau avec uen palette de couleurs .. je sais pas si c'est possible mais bon...

mood
Publicité
Posté le 02-02-2005 à 10:34:21  profilanswer
 

n°969010
FlorentG
Posté le 02-02-2005 à 10:35:20  profilanswer
 

C'est possible, mais ultra-lourdingue :/

n°969013
freed102
Arayashiki
Posté le 02-02-2005 à 10:37:35  profilanswer
 

bah est ce que ce serait pas plus leger que d'afficher 256 lignes de HTML (sans compter les <tr> et </tr> ?
surtout que je dois l'afficher 4 fois (pour l'instant !)

n°969014
FlorentG
Posté le 02-02-2005 à 10:38:14  profilanswer
 

C'est sûr ;)

n°969111
freed102
Arayashiki
Posté le 02-02-2005 à 11:27:48  profilanswer
 

pour faire un document.write() sur plusieurs lignes... on peut pas ?

n°969211
freed102
Arayashiki
Posté le 02-02-2005 à 12:34:06  profilanswer
 

bouuuuuuh ! ça marche pas ma fonction! :(
 
http://clonecopy.net/php/ezdocs/
 
j'ai essayé un truc avec innerHTML mais ça marche pô !

n°969273
cerel
Posté le 02-02-2005 à 13:04:55  profilanswer
 

Voila l'equivalent d'un foreach en JavaScript :

Citation :

var tmp = new Array();
tmp[]=1;
SyntaxError: syntax error
tmp[tmp.length]=1;
1
tmp[tmp.length]=1;
1
tmp[tmp.length]=1;
1
tmp[tmp.length]=1;
1
tmp[tmp.length]=1;
1
tmp[tmp.length]=1;
1
tmp[tmp.length]=1;
1
props(tmp);
Fields: 0, 1, 2, 3, 4, 5, 6
for(x in tmp) { print(x);}
// Ici on obtient les indices du tableau.
0
1
2
3
4
5
6
for(x in tmp) { print(tmp[x]);}
// Ici on affiche les differentes valeurs du tableau
1
1
1
1
1
1
1


 
Edit : Apres avoir vu ton code JS, je sais pourquoi ton innerHTML fonctionne pas...
innerHTML est une "propriete", elle "contient" le contenu du div. Donc quand tu veux ajouter du contenu, il faut l'ajouter. Or toi tu ne fais que "changer le contenu", mais tu ne l'ajoutes pas.
Faut faire un "+=" et non un "=" seul.


Message édité par cerel le 02-02-2005 à 13:12:18
n°969330
FlorentG
Posté le 02-02-2005 à 13:46:03  profilanswer
 

Aussi, ta fonction "AffichePalette" est trop grosse. Au lieu de faire sur chaque ligne un "document.getElementById(div)", pourquoi ne fait-tu pas un :

Code :
  1. var d = document.getElementById(div);
  2. d.innerHTML += ...;
  3. d.innerHTML += ...;


:??: Ca serait encore beaucoup plus léger et rapide. Là le pauvre navigateur doit faire à chaque ligne un getElementById, tu perd grave en performance. Et le mieux encore est de mettre tout ces scripts dans un fichier séparé pour bénéficier de la mise en cache du navigateur :)


Message édité par FlorentG le 02-02-2005 à 13:46:49
n°969532
freed102
Arayashiki
Posté le 02-02-2005 à 15:54:02  profilanswer
 

bah j'ai tout mis dans un fichier séparé mais pour l'instant c'est un include en PHP ! donc ça ne peut pas se voir ! :)
 
Sinon concernant ma page.. pour l'instant tout est valide en XHTML Strict 1.0 ... mais bon sur firefox je vois pas les backgrounds et j'ai des decalages avec mes div... et sur mac n'en parlons pas ! lol
 
je vais tenter de corriger le innerHTML avec ce que tu me dis ! :)

n°969542
freed102
Arayashiki
Posté le 02-02-2005 à 16:01:16  profilanswer
 

... on y est presque ! lol !

mood
Publicité
Posté le 02-02-2005 à 16:01:16  profilanswer
 

n°969548
freed102
Arayashiki
Posté le 02-02-2005 à 16:05:37  profilanswer
 

bah non en fait ça marche pas encore !

n°969585
freed102
Arayashiki
Posté le 02-02-2005 à 16:25:39  profilanswer
 

FlorentG a écrit :

Aussi, ta fonction "AffichePalette" est trop grosse. Au lieu de faire sur chaque ligne un "document.getElementById(div)", pourquoi ne fait-tu pas un :

Code :
  1. var d = document.getElementById(div);
  2. d.innerHTML += ...;
  3. d.innerHTML += ...;


:??: Ca serait encore beaucoup plus léger et rapide. Là le pauvre navigateur doit faire à chaque ligne un getElementById, tu perd grave en performance. Et le mieux encore est de mettre tout ces scripts dans un fichier séparé pour bénéficier de la mise en cache du navigateur :)


 
bon bah ça fait planter IE ! :(
 
j'ai fait ça :
 

Code :
  1. function AffichePalette(nom,div,input)
  2. {
  3. var d=document.getElementById(div);
  4. d.innerHTML="Choisissez votre couleur";
  5. d.innerHTML+="<table>";
  6. d.innerHTML+="<tr>";
  7. d.innerHTML+="<td align=\"center\" valign=\"middle\">";
  8. d.innerHTML+="<table>";
  9. d.innerHTML+="<tr>";
  10. d.innerHTML+="<td>";
  11. d.innerHTML+="<table>";
  12. d.innerHTML+="<tr>";
  13. d.innerHTML+="<td width=\"10\" height=\"10\" bgcolor=\"#000000\"><a class=\"closeLink\" href=\"#\" onclick=\"document.form2."+input+".value='000000';document.getElementById("+nom+" ).style.background='#000000';d.innerHTML='';toggleDisplay("+div+" );\"><img src=\"dummy.gif\" alt=\"couleur\" width=\"10\" height=\"10\" /></a></td>";
  14. d.innerHTML+="<td width=\"10\" height=\"10\" bgcolor=\"#000033\"><a class=\"closeLink\" href=\"#\" onclick=\"document.form2."+input+".value='000033';document.getElementById("+nom+" ).style.background='#000033';d.innerHTML='';toggleDisplay("+div+" );\"><img src=\"dummy.gif\" alt=\"couleur\" width=\"10\" height=\"10\" /></a></td>";
  15. d.innerHTML+="<td width=\"10\" height=\"10\" bgcolor=\"#000066\"><a class=\"closeLink\" href=\"#\" onclick=\"document.form2."+input+".value='000066';document.getElementById("+nom+" ).style.background='#000066';d.innerHTML='';toggleDisplay("+div+" );\"><img src=\"dummy.gif\" alt=\"couleur\" width=\"10\" height=\"10\" /></a></td>";
  16. d.innerHTML+="<td width=\"10\" height=\"10\" bgcolor=\"#000099\"><a class=\"closeLink\" href=\"#\" onclick=\"document.form2."+input+".value='000099';document.getElementById("+nom+" ).style.background='#000099';d.innerHTML='';toggleDisplay("+div+" );\"><img src=\"dummy.gif\" alt=\"couleur\" width=\"10\" height=\"10\" /></a></td>";
  17. d.innerHTML+="<td width=\"10\" height=\"10\" bgcolor=\"#0000CC\"><a class=\"closeLink\" href=\"#\" onclick=\"document.form2."+input+".value='0000CC';document.getElementById("+nom+" ).style.background='#0000CC';d.innerHTML='';toggleDisplay("+div+" );\"><img src=\"dummy.gif\" alt=\"couleur\" width=\"10\" height=\"10\" /></a></td>";
  18. d.innerHTML+="<td width=\"10\" height=\"10\" bgcolor=\"#0000FF\"><a class=\"closeLink\" href=\"#\" onclick=\"document.form2."+input+".value='0000FF';document.getElementById("+nom+" ).style.background='#0000FF';d.innerHTML='';toggleDisplay("+div+" );\"><img src=\"dummy.gif\" alt=\"couleur\" width=\"10\" height=\"10\" /></a></td>";
  19. d.innerHTML+="</tr>";
  20. [...]
  21. }
  22. mais ça marche pô !

n°969625
FlorentG
Posté le 02-02-2005 à 16:53:08  profilanswer
 

Il fait planter IE de quelle manière ?

n°969628
freed102
Arayashiki
Posté le 02-02-2005 à 16:54:09  profilanswer
 

bah ça ecrit en haut de la fenetre "ne reponds pas" et quand je veux fermer... ça plante

n°969634
FlorentG
Posté le 02-02-2005 à 16:55:05  profilanswer
 

T'as pas fait de boucle bizarre ?

n°969668
freed102
Arayashiki
Posté le 02-02-2005 à 17:05:20  profilanswer
 

bah ya plus de boucle là dans mes JS :
 
http://clonecopy.net/php/ezdocs/javascript.php

n°971373
freed102
Arayashiki
Posté le 04-02-2005 à 10:53:40  profilanswer
 

bon j'ai toujours pas resolu mon petit soucy de couleurs.. ça plante mon IE ! et ça affiche que dalle ! lol!
 
pour info voici le code pour lancer la fonction :
 

Code :
  1. <div id="couleurnom1" class="couleurselect" style="background-color:#<?php echo $couleurnom; ?>;">
  2. <a href="#" onclick="toggleDisplay('coul1');AffichePalette('couleurnom1','coul1','couleurnom');" ><img src="dummy.gif" width="32" height="12" alt="Cliquez-ici pour choisir une couleur" /></a>
  3. </div><br />
  4. <div id="coul1" style="display:none;"></div>


Message édité par freed102 le 04-02-2005 à 10:56:55
n°971375
FlorentG
Posté le 04-02-2005 à 10:54:20  profilanswer
 

J'avais aussi une fois fait planté IE avec du innerHTML... Utilise des fonctions DOM sinon, ce sera mieux :)

n°971377
freed102
Arayashiki
Posté le 04-02-2005 à 10:57:19  profilanswer
 

DOM ? conné pas.. faut que je me penche sur la question !

n°971379
FlorentG
Posté le 04-02-2005 à 10:59:46  profilanswer
 

Ouais, penche-toi dessus. Surtout qu'en XHTML servit en application/xhtml+xml, t'es obligé de les utiliser ;)

n°971382
freed102
Arayashiki
Posté le 04-02-2005 à 11:02:43  profilanswer
 

ah oui mais c ultra mega lent le W3C Dom !

n°971385
freed102
Arayashiki
Posté le 04-02-2005 à 11:03:40  profilanswer
 
n°971386
FlorentG
Posté le 04-02-2005 à 11:06:51  profilanswer
 

De toute façon ton truc sera lent, alors on n'est plus à ça près :D Et si ta page est en XHTML, faut utiliser du DOM sinon dans l'avenir ça marchera pas du tout ;)

n°971388
freed102
Arayashiki
Posté le 04-02-2005 à 11:07:44  profilanswer
 

t'as pas une bonne doc là dessus ? j'essaie de trouver mais je vois rien à par cette page qui compare les deux !

n°971392
FlorentG
Posté le 04-02-2005 à 11:09:39  profilanswer
 

Nope :( Juste Google...

n°971438
freed102
Arayashiki
Posté le 04-02-2005 à 11:54:14  profilanswer
 

j'ai pas encore bien compris la différence avec ce que j'ai fait mais en tous cas j'ai compris mon erreur ! :)))
j'ai corrigé.. et ça marche !
 
en fait plutot que faire 256 lignes de d.innerHTML+="<td ....>";
 
je fais un  
 
var d="blablabla";
d+="<table...";
d+="<td...>";
...
et seulement à la fin je fais  
document.getElementById(div).innerHTML = d;
 
... et ça marche tres tres bien ! :D

n°971440
FlorentG
Posté le 04-02-2005 à 11:55:07  profilanswer
 

N'oublie pas de faire des boucles pour tes couleurs, pour gagner encore plus ;)

n°971443
freed102
Arayashiki
Posté le 04-02-2005 à 11:56:04  profilanswer
 

ouai mais là faut que je me creuse un peu plus les meninges ! lol

n°971444
FlorentG
Posté le 04-02-2005 à 11:56:29  profilanswer
 

C'est pas très dur pourtant :)

n°971445
freed102
Arayashiki
Posté le 04-02-2005 à 11:57:05  profilanswer
 

bah je suppose qu'il faut imbriquer 3 boucles.. mais faut que je sache comment....

n°971448
FlorentG
Posté le 04-02-2005 à 11:57:33  profilanswer
 

Deux boucles suffisent je pense.

n°971450
freed102
Arayashiki
Posté le 04-02-2005 à 11:58:12  profilanswer
 

ahumm... bien bien ! je vais y reflechir... je vais deja debugger ce qui s'affiche !

n°971457
freed102
Arayashiki
Posté le 04-02-2005 à 12:02:09  profilanswer
 

wouai enfin ça marche sur IE... Mais firefox plante.. Et le mac n'en parlons pas ! lol !

n°971482
freed102
Arayashiki
Posté le 04-02-2005 à 12:21:24  profilanswer
 

c bon ça marche en fait !... me reste plus qu'un petit prob d'objet requis

n°971536
freed102
Arayashiki
Posté le 04-02-2005 à 12:57:08  profilanswer
 

chti probleme de concatenation je pense....  :??:  
 
ça n'a pas l'air de marcher ça :
 

Code :
  1. d+="<td width=\"10\" height=\"10\" bgcolor=\"#000033\"><a class=\"closeLink\" href=\"#\" onclick=\"document.forms['form2']."+input+".value='000033';document.getElementById("+nom+" ).style.background='#000033';toggleDisplay("+div+" );\"><img src=\"dummy.gif\" alt=\"couleur\" width=\"10\" height=\"10\" /></a></td>";


Message édité par freed102 le 04-02-2005 à 12:57:33
n°971655
freed102
Arayashiki
Posté le 04-02-2005 à 13:58:51  profilanswer
 

yess... c bon ça marchouille!

n°971677
cerel
Posté le 04-02-2005 à 14:13:46  profilanswer
 

Ce que tu peux faire, c'est rajouter un "return false" dans les onclicks que tu utilise pour afficher les options. Comme ca ca evitera que le navigateur suive le lien "#" et du coup retourne tout en haut de la page.

n°971687
freed102
Arayashiki
Posté le 04-02-2005 à 14:23:47  profilanswer
 

yess ! merci pour le tuyau je vais faire ça tout de suite ! :)
 
me reste à faire la même chose avec les polices qui prennent des centaines de lignes
 
nettoyer le code pour qu'il soit valide...
 
à propos... la balise img ne prends pas l'attribut name... je peux faire un document.monimage.src='' avec un id ?

n°971728
FlorentG
Posté le 04-02-2005 à 14:40:32  profilanswer
 

Les trucs genre document.bidule ne doivent pas être utilisés, ils ne marchent pas en XHTML (application/xhtml+xml). Pareil pour l'attribut name qui n'est plus valide (sauf dans les formulaires). Faut toujours utiliser un id et la méthode getElementById...

n°971764
freed102
Arayashiki
Posté le 04-02-2005 à 14:49:47  profilanswer
 

c ce que je suis en train de corriger. thx ! :jap:

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  foreach en javascript

 

Sujets relatifs
Erreurs avec javascriptin_array en javascript ?
Insérer une variable javascript dans dans HTML [RESOLU]Comment savoir si on est sur le dernier element d'un foreach
JSP jstl <c:forEach> probleme!!!!javascript: popup/frames/opener : pb de sécurité pour mozilla ?
caractere blanc de php/javascriptJavascript / frames et formulaire :)
liste deroulante dynamique PHP/Javascriptjavascript et linux
Plus de sujets relatifs à : foreach en javascript


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR