Le javascript, c'est hyper space comme concept

Le javascript, c'est hyper space comme concept - HTML/CSS - Programmation

Marsh Posté le 17-02-2005 à 00:14:44    

J'ai une petite fonction rigolote :

Code :
  1. function initLiens() {
  2. for(i=1 ; i<=nbMenus ; i++) {
  3.  document.getElementById("lienmenu" + i).onclick = function() {
  4.   afficherMenu(i);
  5.  };
  6. }
  7. }


Voilà, rien de bien terrible.
 
Ce qui est rigolo, c'est que le lien ayant l'id "lienmenu1" devrait lancer la fonction afficherMenu(1). Mais non, ça lance afficherMenu(3). :heink:  
 
Encore plus fort, j'ai essayé ceci :
 

Code :
  1. function initLiens() {
  2. for(i=1 ; i<=nbMenus ; i++) {
  3.  var itemp = i;
  4.  document.getElementById("lienmenu" + i).onclick = function() {
  5.   afficherMenu(itemp);
  6.  };
  7. }
  8. }


Et là, un clic sur le lien "lienmenu1" me lance afficherMenu(2). [:tinostar]  
 
 
Alors, est-ce que je suis aveugle et c'est normal, ou est-ce que c'est un bug, ou quoi ? :o (je précise que je suis sous Firefox, rien à battre de IE pour le moment, puisque c'est pour une page en local pour moi tout seul, je verrais IE plus tard).

Reply

Marsh Posté le 17-02-2005 à 00:14:44   

Reply

Marsh Posté le 17-02-2005 à 00:57:46    

Peut-etre que le probleme vient du "scope".
 
Faudrait savoir si JS utilise la valeur de la variable (au moment ou tu utilise ta fonction anonyme), ou si ce dernier garde le nom de la variable...
 
Essaye quelque chose comme ca juste pour voir :

Code :
  1. function initLiens() {
  2.          for(i=1 ; i<=nbMenus ; i++) {
  3.              var itemp = i;
  4.              document.getElementById("lienmenu" + i).onclick = eval ('function() {
  5.                  afficherMenu('+itemp+');
  6.              };');
  7.          }
  8.      }

Reply

Marsh Posté le 17-02-2005 à 01:59:11    

sinon une autre solution est d'ajouter une propriété à ton element:
 

Code :
  1. function initLiens() {
  2. for(i=1 ; i<=nbMenus ; i++) {
  3.  document.getElementById("lienmenu" + i).nouvellepropriete = i;
  4.  document.getElementById("lienmenu" + i).onclick = function() {
  5.   afficherMenu(this.nouvellepropriete);
  6.  };
  7. }
  8. }

Reply

Marsh Posté le 17-02-2005 à 02:14:36    

yeah, la nouvelle propriete marche impec. En plus c'est un concept que je connaissait pas, merci :)
 
le coup du eval, j'avais essayé avec function() { afficherMenu(""+i) } mais ca marchait pas, et là ta proposition ne marche pas non plus, ça ne réagit simplement pas :heink:
 
bon, je laisse tomber, la proposition de k666 marche, c'est parfait :love:

Reply

Marsh Posté le 17-02-2005 à 03:19:20    

cool !
au fait aurais tu une méthode pour résoudre cette équation ?
 
# (x1 - X)² + (y1 - Y)² + (z1 - Z)² = c²(t1 - T-d1)²
# (x2 - X)² + (y2 - Y)² + (z2 - Z)² = c²(t2 - T-d2)²
# (x3 - X)² + (y3 - Y)² + (z3 - Z)² = c²(t3 - T-d3)²
# (x3 - X)² + (y3 - Y)² + (z4 - Z)² = c²(t4 - T-d4)²
 
les variables son X Y Z et T


Message édité par k666 le 17-02-2005 à 03:21:39
Reply

Marsh Posté le 17-02-2005 à 10:30:58    

heu :heink:
 
moi les maths, ca fait un moment que j'en ai pas fait, désolé :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed