A voir également:
- Calcul dynamique
- Tableau croisé dynamique - Guide
- Calcul moyenne excel - Guide
- Liste déroulante dynamique excel - Guide
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
4 réponses
Bonjour,
Vous ne pouvez pas avoir plusieurs éléments ayant le même id (mid[]) sinon la fonction getElementById() ne renvoie que la première occurence.
Pour palier à ce problème, vous devez définir un compteur dans la boucle issue de la requête sql et faire dépendre les ids de ce compteur :
mid[]_<%=compteur%> par exemple.
Enfin pour récupérer les données, voici deux méthodes possibles :
1/ Utiliser la methode document.getElementByTagNames('INPUT') et tester si l'id commence par mid[] pour chacun des résultats obtenus
2/ Définir à la fin de la "boucle sql" une variable javascript : var nbtot = <%=compt%>;
Ce qui permet ensuite de parcourir les éléments avec une boucle for
for (var i =0; i < nbtot, i++) {
var elem = document.getElementById("mid[]" + i);
}
Cordialement,
Jres
Vous ne pouvez pas avoir plusieurs éléments ayant le même id (mid[]) sinon la fonction getElementById() ne renvoie que la première occurence.
Pour palier à ce problème, vous devez définir un compteur dans la boucle issue de la requête sql et faire dépendre les ids de ce compteur :
mid[]_<%=compteur%> par exemple.
Enfin pour récupérer les données, voici deux méthodes possibles :
1/ Utiliser la methode document.getElementByTagNames('INPUT') et tester si l'id commence par mid[] pour chacun des résultats obtenus
2/ Définir à la fin de la "boucle sql" une variable javascript : var nbtot = <%=compt%>;
Ce qui permet ensuite de parcourir les éléments avec une boucle for
for (var i =0; i < nbtot, i++) {
var elem = document.getElementById("mid[]" + i);
}
Cordialement,
Jres
Merci pour le coup de main,
j'ai fait les changements que vous avez mentionné mais maintenant il ne calcul plus rien et m'envois une erreur Object expected.
voici les changements apportés.
<SCRIPT language="javascript" >
function calcul(){
for (var i =0; i < nbtot, i++) {
var mardi = document.getElementById("mid[]_" + i);
var jeudi = document.getElementById("jid[]_" + i);
}
var total = Number(mardi + jeudi);
document.getElementById("total").value = total.toFixed(2);
}
</SCRIPT>
ET PLUS BAS
print '<tr><input type="hidden" "name="id[]" value='.$id.'><td><input type="text" name="prenom[]" value='.$prenom.' size="14"> <input type="text" name="nom[]" value='.$nom.' size="14"><td>'.$adresse.', '.$ville.'<td><center><input type="text" name="mardipopote[]" id="mid[]_<%=compteur%>" value="'.$mardipopote.'" onChange="calcul()" size="3"><td><center><input type="text" name="jeudipopote[]" id="jid[]_<%=compteur%>" value="'.$jeudipopote.'" size="3" onChange="calcul()" ><SCRIPT language="javascript" > var nbtot = <%=compt%>; </SCRIPT>';
$i++;
}
?>
Où est mon erreur?
j'ai fait les changements que vous avez mentionné mais maintenant il ne calcul plus rien et m'envois une erreur Object expected.
voici les changements apportés.
<SCRIPT language="javascript" >
function calcul(){
for (var i =0; i < nbtot, i++) {
var mardi = document.getElementById("mid[]_" + i);
var jeudi = document.getElementById("jid[]_" + i);
}
var total = Number(mardi + jeudi);
document.getElementById("total").value = total.toFixed(2);
}
</SCRIPT>
ET PLUS BAS
print '<tr><input type="hidden" "name="id[]" value='.$id.'><td><input type="text" name="prenom[]" value='.$prenom.' size="14"> <input type="text" name="nom[]" value='.$nom.' size="14"><td>'.$adresse.', '.$ville.'<td><center><input type="text" name="mardipopote[]" id="mid[]_<%=compteur%>" value="'.$mardipopote.'" onChange="calcul()" size="3"><td><center><input type="text" name="jeudipopote[]" id="jid[]_<%=compteur%>" value="'.$jeudipopote.'" size="3" onChange="calcul()" ><SCRIPT language="javascript" > var nbtot = <%=compt%>; </SCRIPT>';
$i++;
}
?>
Où est mon erreur?
J'ai changé mon code, curieusement lors que j'essais une alerte avec un array en particulier ça me sort la bonne valeur, mais dans une boucle j'ai toujours des erreus...
<SCRIPT language="javascript" >
function calcul(){
var myMardiArray=document.getElementsByName("mardipopote[]");
var myJeudiArray=document.getElementsByName("jeudipopote[]");
// ici tu déclare tes variable car tu ne peux les déclarer qu'une fois
var TotalMardi = 0;
var TotalJeudi = 0;
for (var i =0; i < myMardiArray.lenght, i++) {
TotalMardi = TotalMardi + myMardiArray[i].value;
TotalJeudi = TotalJeudi + myJeudiArray[i].value;
}
var total = TotalMardi + TotalJeudi ;
document.getElementByName("total").value = total.toFixed(2);
}
</SCRIPT>
<SCRIPT language="javascript" >
function calcul(){
var myMardiArray=document.getElementsByName("mardipopote[]");
var myJeudiArray=document.getElementsByName("jeudipopote[]");
// ici tu déclare tes variable car tu ne peux les déclarer qu'une fois
var TotalMardi = 0;
var TotalJeudi = 0;
for (var i =0; i < myMardiArray.lenght, i++) {
TotalMardi = TotalMardi + myMardiArray[i].value;
TotalJeudi = TotalJeudi + myJeudiArray[i].value;
}
var total = TotalMardi + TotalJeudi ;
document.getElementByName("total").value = total.toFixed(2);
}
</SCRIPT>
Bonsoir,
Pour répondre au message 2, plusieurs remarques :
Il faut déclarer nbtot avant la fonction calcul() puis la mettre en jour en "bas de boucle".
Mardi et jeudi sont des elements, vous ne pouvez pas les sommer sans prendre leur value puis caster celles-ci en Number.
En ce qui concerne le message 3 en utilisant la methode getElementsByName :
Je ne vois pas d'incohérence mise à part le myMardiArray.lenght qui devrait être myMardiArray.length.
Quelles sont les erreurs rencontrées ? A vérifier peut être si le cast implicite de myMardiArray[i].value en Number est bien effectué.
Cordialement,
Jres
Pour répondre au message 2, plusieurs remarques :
Il faut déclarer nbtot avant la fonction calcul() puis la mettre en jour en "bas de boucle".
Mardi et jeudi sont des elements, vous ne pouvez pas les sommer sans prendre leur value puis caster celles-ci en Number.
En ce qui concerne le message 3 en utilisant la methode getElementsByName :
Je ne vois pas d'incohérence mise à part le myMardiArray.lenght qui devrait être myMardiArray.length.
Quelles sont les erreurs rencontrées ? A vérifier peut être si le cast implicite de myMardiArray[i].value en Number est bien effectué.
Cordialement,
Jres