[JS] problème de variable

Résolu
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   -  
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'ai modifié un script JS trouvé sur le net. Il fonctionne sauf sur un point.
Le principe est d'ajouté pour chaque tableau 2 champs.
Le problème réside dans la variable count_$i
où $i est l'identification du tableau (se trouvant dans un formulaire, je l'utilise pour savoir d'où viens l'information)

en vérifiant le code source j'ai bien count_0 = 0 et count_1 = 0
Ce qui est normal mais bizarrement, lorsque je clique sur le lien pour ajouter un champ, peu importe sur quel lien je clique, il ne fait pas la différence entre count_0 et count_1.
Donc problème car les nom des champs ne seront pas en continu à partir de 0.
exemple :
Si je clique 1 fois sur le premier, une fois sur le second et encore une fois sur le premier, j'obtient la suite 1, 2, 3. Donc pour le premier tableau, l'id 2 n'existe pas. J'aurai du obtenir 1, 1, 2.

Voici le code :
<?php 
for ($i = 0; $i <= 1; $i++) 
{ 
?> 
<script language="javascript" type="text/javascript"> 
 //Commence à compter à 0 
 var count_<?php echo $i;?> = 0; 
  
 function one_more_ligne (i) { 
 count_<?php echo $i;?>++; 
 var tr = document.createElement("tr"); 
 var td_1 = document.createElement("td"); 
 var td_2 = document.createElement("td"); 
 var inp1 = document.createElement("input"); 
 var inp2 = document.createElement("input"); 
  
 inp1.type = "text"; 
 inp2.type = "text"; 
 inp1.name = "lien["+i+"]["+count_<?php echo $i;?>+"]"; 
 inp1.id = "lien["+i+"]["+count_<?php echo $i;?>+"]"; 
 inp2.name = "commentaire["+i+"]["+count_<?php echo $i;?>+"]"; 
 inp2.id = "commentaire["+i+"]["+count_<?php echo $i;?>+"]"; 
  
 td_1.appendChild(inp1); 
 td_2.appendChild(inp2); 
 tr.appendChild(td_1); 
 tr.appendChild(td_2); 
 byId("table_lien_"+i+"").getElementsByTagName('tbody')[0].appendChild(tr); 
 } 
  
 function byId(elmId){ 
 var elm = document.getElementById(elmId); 
 if(elm==null) 
 elm = document.getElementsByName(elmId)[0]; 
  
 //Affiche une alerte pour voir directement le code HTML 
 //alert(elm.innerHTML); 
 return elm; 
 } 
</script> 

<table id="table_lien_<?php echo $i;?>" name="table_lien_<?php echo $i;?>"> 
 <tbody> 
  <tr> 
   <td>Lien</td> 
   <td>Commentaire</td> 
  </tr> 
  <tr> 
   <td colspan="2" align="center"><a href="#" onclick="one_more_ligne(<?php echo $i;?>);">[+] Ajouter une ligne</a></td> 
  </tr> 
  <tr> 
   <td><input type="text" id="lien[<?php echo $i;?>][0]" name="lien[<?php echo $i;?>][0]" /></td> 
   <td><input type="text" id="commentaire[<?php echo $i;?>][0]" name="commentaire[<?php echo $i;?>][0]" /></td> 
  </tr> 
 </tbody> 
</table> 
<?php 
} 
?>


Pour tester, voici le lien : http://www.blizer.net/test.html

Merci d'avance.
L'amour, c'est comme les spaghettis; quand c'est mou, c'est cuit. (proverbe belge)

1 réponse

le père
 
Bonjour

Normal, ta fonction one_more_ligne est définie deux fois avec exactement le même nom ! Tes clics appelle toujours la première ou la seconde, je ne sais pas, et travaillent donc toujours avec count_0 ou count_1, l'autre variable n'est pas utilisée.

Je n'ai pas suivi le détail de ce que tu cherches à faire, mais il me semble que ta fonction devrait être définie en dehors du 'for' et qu'au lieu d'avoir des variables count_0,count_1, etc... tu devrais avoir un tableau
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
Ok merci pour ton aide :D
0