A voir également:
- Calcul javascript dans un formulaire
- Calcul moyenne excel - Guide
- Formulaire de réclamation facebook - Guide
- Telecharger javascript - Télécharger - Langages
- Calcul km marche à pied gratuit - Télécharger - Sport
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
3 réponses
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
32
3 févr. 2011 à 17:33
3 févr. 2011 à 17:33
Seule indication : utiliser des points pour les virgules, les commentaires de mon code devraient être assez clais (j'espère), sinon, regarde ici : https://openclassrooms.com/fr/courses/5543061-ecrivez-du-javascript-pour-le-web?archived-source=1916641
<!doctype html> <head> <!-- Voir d'abord la partie html sous ton body. Eviter les noms de balise en majuscule, c'est pas conforme à la norme (compatibilité navigateurs et dans le futur)... //--> <script> var total=0; // on initialise la valeur de total à 0. la valeur de total est externe à la fonction, sinon à chaque fois qu'on appelle la fonction, elle function testValeur(valeur) { // La fonction qui contrôle les valeurs saisies. var valeur=parseFloat(valeur,10); // On transforme le chiffre en valeur entière (pas en décimale, attention !). Le parmaètre 10 après valeur, c'est pour forcer le nombre en base 10 (sinon tu pourrais avoir des surprises) if (isNaN(valeur)) alert("Veuillez saisir un nombre entier..."); // Si la valeur n'est pas un nombre (isNaN = isNotaNumber) on envoi un message d'alert à l'utilisateur else { // Sinon total += valeur; // La valeur de total augmente de la propre valeur saisie... } // somme de la première ligne de valeurs. var nba=parseFloat(document.getElementById('q1').value) + parseFloat(document.getElementById('q2').value)+parseFloat(document.getElementById('q3').value)+parseFloat(document.getElementById('q4').value)+parseFloat(document.getElementById('q5').value)+parseFloat(document.getElementById('q6').value)+parseFloat(document.getElementById('q7').value)+parseFloat(document.getElementById('q8').value)+parseFloat(document.getElementById('q9').value)+parseFloat(document.getElementById('q10').value); // On met les valeurs dans des objets (sorte de tableaux de valeurs) / ligne1=1re ligne de valeurs, ligne3 = les réponses attendues var ligne1 = { q1: document.getElementById("q1"), q2: document.getElementById("q2"), q3: document.getElementById("q3"), q4: document.getElementById("q4"), q5: document.getElementById("q5"), q6: document.getElementById("q6"), q7: document.getElementById("q7"), q8: document.getElementById("q8"), q9: document.getElementById("q9"), q10: document.getElementById("q10") }; var ligne2 = { q1: document.getElementById("q11"), q2: document.getElementById("q12"), q3: document.getElementById("q13"), q4: document.getElementById("q14"), q5: document.getElementById("q15"), q6: document.getElementById("q16"), q7: document.getElementById("q17"), q8: document.getElementById("q18"), q9: document.getElementById("q19"), q10: document.getElementById("q20") }; var ligne3 = { q1: document.getElementById("p1"), q2: document.getElementById("p2"), q3: document.getElementById("p3"), q4: document.getElementById("p4"), q5: document.getElementById("p5"), q6: document.getElementById("p6"), q7: document.getElementById("p7"), q8: document.getElementById("p8"), q9: document.getElementById("p9"), q10: document.getElementById("p10") }; // On affiche le total au fur et à mesure... document.getElementById('total').value=total; // Si les valeurs le permettent, on fait le total de NBA (?) -> je sais pas ce que c'est. if (!isNaN(nba)) document.getElementById('nba').value=nba; else document.getElementById('nba').value="..."; // On fait les formules... // Ex: si la première valeur de la ligne 1 ligne1.q1 fait référence à la valeur de q1 déclarée plus haut dans l'objet ligne1 (soit = document.getElementById("q1")) if (ligne1.q1.value != "" && ligne2.q1.value != "") ligne3.q1.value = (parseFloat(ligne1.q1.value) * parseFloat(ligne2.q1.value))/total; if (ligne1.q2.value != "" && ligne2.q2.value != "") ligne3.q2.value = (parseFloat(ligne1.q2.value) * parseFloat(ligne2.q2.value))/total; if (ligne1.q3.value != "" && ligne2.q3.value != "") ligne3.q3.value = (parseFloat(ligne1.q3.value) * parseFloat(ligne2.q3.value))/total; if (ligne1.q4.value != "" && ligne2.q4.value != "") ligne3.q4.value = (parseFloat(ligne1.q4.value) * parseFloat(ligne2.q4.value))/total; if (ligne1.q5.value != "" && ligne2.q5.value != "") ligne3.q5.value = (parseFloat(ligne1.q5.value) * parseFloat(ligne2.q5.value))/total; if (ligne1.q6.value != "" && ligne2.q6.value != "") ligne3.q6.value = (parseFloat(ligne1.q6.value) * parseFloat(ligne2.q6.value))/total; if (ligne1.q7.value != "" && ligne2.q7.value != "") ligne3.q7.value = (parseFloat(ligne1.q7.value) * parseFloat(ligne2.q7.value))/total; if (ligne1.q8.value != "" && ligne2.q8.value != "") ligne3.q8.value = (parseFloat(ligne1.q8.value) * parseFloat(ligne2.q8.value))/total; if (ligne1.q9.value != "" && ligne2.q9.value != "") ligne3.q9.value = (parseFloat(ligne1.q9.value) * parseFloat(ligne2.q9.value))/total; if (ligne1.q10.value != "" && ligne2.q10.value != "") ligne3.q10.value = (parseFloat(ligne1.q10.value) * parseFloat(ligne2.q10.value))/total; // Les calculs complémentaires if (ligne3.q1.value != "" && ligne3.q2.value != "") document.getElementById('p11').value=total*12; if (ligne3.q3.value != "" && ligne3.q4.value != "") document.getElementById('p12').value=total*12*0.21; if (ligne3.q5.value != "" && ligne3.q6.value != "") document.getElementById('p13').value=nba*12; if (ligne3.q7.value != "" && ligne3.q8.value != "") document.getElementById('p14').value=nba*12*0.21; } </script> <style type="text/css"> table.saisies { background: #f90; } table.saisies td { border: colid 1px; red; } </style> </head> <body> <!-- Travailler avec des formulaire et du JavaScript ça n'a pas trop de sens (sauf pour l'ajax). Puisque lorsqu'un formulaire est validé, la page d'action, (par défaut la page en cours) se (re)charge (=> perte des informations saisies). J'ai ajouté un boutton "Calculer" en dessus pour valider le formulaire. //--> <!-- Deuxième remarque : evite d'accéder aux valeurs des éléments comme tu l'as fais : document.form.form1. Je le faisais au début, mais tu perds du temps et c'est pas tellement efficace et limité, accès à son id qu'il faudra lui donné. //--> <table class="saisies"> <!-- Je ne sais pas si le référencement préfère les <th>, mais je n'en vois pas souvent, j'utilise du css (class='saisies') vois enhaut l'accès aux propriétés de styles dans les balises style... //--> <tr> <td><input type="text" size="3" maxlength="3" id="q1" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q2" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q3" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q4" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q5" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q6" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q7" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q8" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q9" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q10" onblur="testValeur(this.value);" /></td> </tr> <tr> <td><input type="text" size="3" maxlength="3" id="q11" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q12" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q13" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q14" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q15" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q16" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q17" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q18" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q19" onblur="testValeur(this.value);" /></td> <td><input type="text" size="3" maxlength="3" id="q20" onblur="testValeur(this.value);" /></td> </tr> </table> <table class="reponses"> <tr> <td><input type="text" size="3" id="p1" disabled="disabled" /></td> <td><input type="text" size="3" id="p2" disabled="disabled" /></td> </tr> <tr> <td><input type="text" size="3" id="p3" disabled="disabled" /></td> <td><input type="text" size="3" id="p4" disabled="disabled" /></td> </tr> <tr> <td><input type="text" size="3" id="p5" disabled="disabled" /></td> <td><input type="text" size="3" id="p6" disabled="disabled" /></td> </tr> <tr> <td><input type="text" size="3" id="p7" disabled="disabled" /></td> <td><input type="text" size="3" id="p8" disabled="disabled" /></td> </tr> <tr> <td><input type="text" size="3" id="p9" disabled="disabled" /></td> <td><input type="text" size="3" id="p10" disabled="disabled" /></td> </tr> </table> <br /> Total : <input type="text" size="10" id="total" disabled="disabled" /><br /> NBA : <input type="text" size="10" id="nba" disabled="disabled" /><br /> <br /> <input type="text" size="5" id="p11" disabled="disabled" /> <input type="text" size="5" id="p12" disabled="disabled" /> <input type="text" size="5" id="p13" disabled="disabled" /> <input type="text" size="5" id="p14" disabled="disabled" /> </body>
Fetide68
Messages postés
746
Date d'inscription
dimanche 4 janvier 2009
Statut
Membre
Dernière intervention
16 septembre 2024
32
3 févr. 2011 à 11:40
3 févr. 2011 à 11:40
Les nombres saisis dans les formulaires sont des chaines de caractères, pour forcer la machine à faire les calcule, il faut transformer la donnée saisie par l'utilisateur en entier ou en décimal :
parseInt(p1.value); // s'il s'agit d'un nombre entier
parseFloat(p1.value); // si tu compte autoriser les décimales
Mais petits conseils, utilise des boucles, tu gagneras du temps et pense à vérifier que l'utilisateur ne rentre pas n'importe quoi... (je reviens vers toi avec des explications sur ton code).
parseInt(p1.value); // s'il s'agit d'un nombre entier
parseFloat(p1.value); // si tu compte autoriser les décimales
Mais petits conseils, utilise des boucles, tu gagneras du temps et pense à vérifier que l'utilisateur ne rentre pas n'importe quoi... (je reviens vers toi avec des explications sur ton code).
4 févr. 2011 à 11:09
C'est dans des <th> je ne peux pas le changer, c'est imposé...
Cependant, je n'ai jamais utilisé d'objets, ça correspond à quoi, les variables ligne 1, 2 et 3?
Puis où se trouve le calcul de total ? En fait total c'est simplement q1*q11 + q2*q12 + q3*q13 ....+ q10*q20.
Ce total je m'en sers pour calculer et afficher les cellules de p1 à p10, puisque p1 par exemple c'est (q1*q11) / total.
nba c'est une variable dont je me sers plus tard qui est en fait la somme des valeurs de la 1ere ligne du tableau (c'est à dire de q1 à q10).
J'ai copié ton code, j'essaye de le comprendre, tu dis que tu as ajouté un bouton calculer, mais je ne l'ai pas du coup ça ne fait rien là, les résultats ne s'affichent pas dans mes cellules.
Sinon tu dis qu'il vaut mieux utiliser Ajax ? je vais m'y pencher, existe t-il des scripts tout fait avec exemples pour ce genre de choses, car si c'est trop complexe, je n'ai pas le temps là...
Je remets mon code complet :