Automatisation d'un code javascript
Résolu/Fermé
ced3c
Messages postés
237
Date d'inscription
samedi 19 juillet 2008
Statut
Membre
Dernière intervention
28 mai 2016
-
28 mai 2016 à 14:01
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 - 28 mai 2016 à 18:34
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 - 28 mai 2016 à 18:34
A voir également:
- Automatisation d'un code javascript
- Code asci - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Telecharger javascript - Télécharger - Langages
4 réponses
jordane45
Messages postés
38454
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 mars 2025
4 741
Modifié par jordane45 le 28/05/2016 à 15:39
Modifié par jordane45 le 28/05/2016 à 15:39
Bonjour,
Le plus simple est d'utiliser une class "fictive".
et d'utiliser cette classe pour avoir la liste de tous les INPUT à utiliser pour ton calcul.
dans ton php:
Puis dans le Javascript un truc du genre :
Cordialement,
Jordane
Le plus simple est d'utiliser une class "fictive".
et d'utiliser cette classe pour avoir la liste de tous les INPUT à utiliser pour ton calcul.
dans ton php:
echo " <input type='text' id='input_tot_".$i."' class='aclaculer' ... ";
Puis dans le Javascript un truc du genre :
//récupère TOUS les éléments dont la class est : aclaculer var elements = document.getElementsByClassName('aclaculer'); var resultat = 0; //boucle sur les elements elements.forEach(function(elm) { resultat += parseFloat(elm.value); });
Cordialement,
Jordane
ced3c
Messages postés
237
Date d'inscription
samedi 19 juillet 2008
Statut
Membre
Dernière intervention
28 mai 2016
5
28 mai 2016 à 15:31
28 mai 2016 à 15:31
Merci pour votre réponse Jordane
Je vais essayer votre méthode.
Par contre je ne sais pas à quoi correspond elm dans function(elm).
Je dois le remplacer par quelque chose ? ou le declarer ?
Pourriez vous m'expliquer svp ? (novice en javascript et php)
merci beaucoup
Je vais essayer votre méthode.
Par contre je ne sais pas à quoi correspond elm dans function(elm).
Je dois le remplacer par quelque chose ? ou le declarer ?
Pourriez vous m'expliquer svp ? (novice en javascript et php)
merci beaucoup
jordane45
Messages postés
38454
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 mars 2025
4 741
28 mai 2016 à 15:35
28 mai 2016 à 15:35
Il n'y a rien à modifier dans le code js.
le foreach permet de boucler sur chaque item de l'array "elements".
Pour chaque item (elm).. on fait le code qui se trouve dans la function.
(*) elm = abréviation pour le mot élement.
le foreach permet de boucler sur chaque item de l'array "elements".
Pour chaque item (elm).. on fait le code qui se trouve dans la function.
(*) elm = abréviation pour le mot élement.
ced3c
Messages postés
237
Date d'inscription
samedi 19 juillet 2008
Statut
Membre
Dernière intervention
28 mai 2016
5
28 mai 2016 à 15:37
28 mai 2016 à 15:37
Merci je vais tester cela de suite
ced3c
Messages postés
237
Date d'inscription
samedi 19 juillet 2008
Statut
Membre
Dernière intervention
28 mai 2016
5
28 mai 2016 à 15:49
28 mai 2016 à 15:49
function acalculer(){
//récupère TOUS les éléments dont la class est : acalculer
var elements = document.getElementsByClassName('acalculer');
var resultat = 0;
//boucle sur les elements
elements.forEach(function(elm) {
resultat += parseFloat(elm.value);
});
}
J'ai bien mis la class="acalculer" dans les "input_tot_<?php echo $i;?"
Cependant j'ai une erreur dans la console qui m'indique :
elements.forEach is not a function
Ai je une erreur dans ce code svp ?
Merci
jordane45
Messages postés
38454
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 mars 2025
4 741
28 mai 2016 à 15:56
28 mai 2016 à 15:56
Oups au temps pour moi...
j'ai tellement l'habitude de bosser en jquery que j'oublie parfois certains morceaux pour le 'pur' javascript et ou ne sont pas fonctionnels pour certains navigateurs...
Ajoute ce code la en plus dans ta page (issue de : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/forEach :
et puis si ça ne marche toujours pas, il est toujours possible de passer par une boucle "traditionnelle"
du genre :
(finalement la vielle méthode est sûrement la plus simple... :-) )
j'ai tellement l'habitude de bosser en jquery que j'oublie parfois certains morceaux pour le 'pur' javascript et ou ne sont pas fonctionnels pour certains navigateurs...
Ajoute ce code la en plus dans ta page (issue de : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Array/forEach :
if (!Array.prototype.forEach) { Array.prototype.forEach = function(callback, thisArg) { var T, k; if (this == null) { throw new TypeError(' this vaut null ou n est pas défini'); } // 1. Soit O le résultat de l'appel à ToObject // auquel on a passé |this| en argument. var O = Object(this); // 2. Soit lenValue le résultat de l'appel de la méthode // interne Get sur O avec l'argument "length". // 3. Soit len la valeur ToUint32(lenValue). var len = O.length >>> 0; // 4. Si IsCallable(callback) est false, on lève une TypeError. // Voir : http://es5.github.com/#x9.11 if (typeof callback !== "function") { throw new TypeError(callback + ' n est pas une fonction'); } // 5. Si thisArg a été fourni, soit T ce thisArg ; // sinon soit T égal à undefined. if (arguments.length > 1) { T = thisArg; } // 6. Soit k égal à 0 k = 0; // 7. On répète tant que k < len while (k < len) { var kValue; // a. Soit Pk égal ToString(k). // (implicite pour l'opérande gauche de in) // b. Soit kPresent le résultat de l'appel de la // méthode interne HasProperty de O avec l'argument Pk. // Cette étape peut être combinée avec c // c. Si kPresent vaut true, alors if (k in O) { // i. Soit kValue le résultat de l'appel de la // méthode interne Get de O avec l'argument Pk. kValue = O[k]; // ii. On appelle la méthode interne Call de callback // avec T comme valeur this et la liste des arguments // qui contient kValue, k, et O. callback.call(T, kValue, k, O); } // d. On augmente k de 1. k++; } // 8. on renvoie undefined }; }
et puis si ça ne marche toujours pas, il est toujours possible de passer par une boucle "traditionnelle"
du genre :
var nbElm = elements.length; for (var i=0 ; i<=nbElm;i++){ resultat += parseFloat(elements[i].value); }
(finalement la vielle méthode est sûrement la plus simple... :-) )
ced3c
Messages postés
237
Date d'inscription
samedi 19 juillet 2008
Statut
Membre
Dernière intervention
28 mai 2016
5
28 mai 2016 à 16:06
28 mai 2016 à 16:06
Ah je viens de voir le debut de code et je vois des arrays.
Mon code n'en contient pas
J'ai fais mon tableau en bouclant sur les <tr> et <td>
Je ne sais pas du coup si cela marchera. (je suis débutant php aussi et j'arrête pas de remanier mon code à mesure que j'apprends un peu plus)
Je vais me tourner vers la 'vieille méthode' pour essayer ^^
Merci
Mon code n'en contient pas
J'ai fais mon tableau en bouclant sur les <tr> et <td>
Je ne sais pas du coup si cela marchera. (je suis débutant php aussi et j'arrête pas de remanier mon code à mesure que j'apprends un peu plus)
Je vais me tourner vers la 'vieille méthode' pour essayer ^^
Merci
ced3c
Messages postés
237
Date d'inscription
samedi 19 juillet 2008
Statut
Membre
Dernière intervention
28 mai 2016
5
28 mai 2016 à 16:14
28 mai 2016 à 16:14
Je pense qu'avec mes maigres connaissances de javascript je fais n'importe quoi avec votre code
J'en suis à ce niveau
Avec une erreur console sur le value de :
J'en suis à ce niveau
<script type="text/javascript">
function acalculer(){
var resultat = document.getElementById('total_commande');
var elements = document.getElementsByClassName('acalculer');
var nbElm = elements.length;
for (var i=0 ; i<=nbElm;i++){
resultat += parseFloat(elements[i].value);
}
document.getElementById('total_commande').value = resultat;
}
</script>
Avec une erreur console sur le value de :
resultat += parseFloat(elements[i].value);
jordane45
Messages postés
38454
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 mars 2025
4 741
28 mai 2016 à 18:03
28 mai 2016 à 18:03
function calculer(){ var elements = document.getElementsByClassName('acalculer'); var resultat = 0; var nbElm = elements.length; for (var i=0 ; i<nbElm;i++){ resultat += parseFloat(elements[i].value); } //et ici tu peux mettre le résultat dans ton champ input var total_commande = document.getElementById('total_commande'); total_commande.value = resultat; }
ced3c
Messages postés
237
Date d'inscription
samedi 19 juillet 2008
Statut
Membre
Dernière intervention
28 mai 2016
5
28 mai 2016 à 18:09
28 mai 2016 à 18:09
Ah cela marche à merveille !
Merci beaucoup Jordane
Merci beaucoup Jordane
jordane45
Messages postés
38454
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 mars 2025
4 741
28 mai 2016 à 18:13
28 mai 2016 à 18:13
Pour info, c'était le <= (petite erreur de ma part) qui posait problème dans ma boucle
que j'ai donc remplacé par :
for (var i=0 ; i<=nbElm;i++){
que j'ai donc remplacé par :
for (var i=0 ; i<=nbElm;i++){
ced3c
Messages postés
237
Date d'inscription
samedi 19 juillet 2008
Statut
Membre
Dernière intervention
28 mai 2016
5
28 mai 2016 à 18:34
28 mai 2016 à 18:34
Merci pour la précision :)