11548 sujets

JavaScript, DOM et API Web HTML5

Pages :
(reprise du message précédent)

ok, j'ai éclairci mon problème.
Tout vient de input.length.
En fait i est bien géré sauf que input.length se vide au fur et à mesure de l'exécution de la fonction !
Ce qui est logique dans un sens.
input.length contient le nombre d'éléments input dans ma page. Or ma fonction EnleveArticle enlève un élément input à chaque passage.
input.length se voyait donc décrémenté de 1 à chaque passage pendant que i était incrémenté lui aussi de 1.
Et finalement le jeu de la pile length qui se vide et de i qui augmente aboutissait à une égalité à mi-chemin.

J'ai donc modifié ma fonction pour ne pas mettre de condition d'itération. Et j'en ai profité pour travailler sur un input[0]...
for(var i=0;i<input.length;){
 if(input[0].type=='text'){
 EnleveArticle(input[0].name.substr(3,7));
 }
}
a écrit :
for(var i=0;i<input.length;)

Voilà une boucle for(t) exotique...
un while aurait été plus logique... while(input.length>0) mais bon c'est du chipotage. Tant que ça fonctionne...

Moralité de toute l'histoire : Lorsqu'il s'agit de supprimer des éléments dans un tableau, toujours commencer par le dernier, ça évite des problèmes.
Arf !
Effectivement !
J'en ai tellement plein la tête en ce moment que je commence à ramer sévère !
Il me semble que cette écriture est possible, mais la boucle while est plus adaptée dans ce cas, je vais nettoyer mon code Smiley smile

Entre manipuler Excel via l'objet COM avec PHP, triturer du JS dans tous les sens, ça devient chaud Smiley smile

var i = input.length;
while (i--) {
[...]
}

Pour info, ce genre de boucle est beaucoup plus rapide qu'un for, si ça ne te pose pas de problème de parcourir ton tableau à l'envers, préfère cette version Smiley cligne

Mais c'est p't'etre pas facilement appliquable dans ton cas
Modifié par Tymlis (19 Oct 2007 - 09:46)
Pages :