Dans le cadre de mon boulot (prof de math), je suis en train de créer une page html avec un peu de javascript.
Cette page étant pour le niveau 5ème, je leur fait faire des additions et soustractions sur les nombres relatifs (moins facile qu’il n’y parait pour un petit jeune)
J’ai donc créé deux fonctions de vérifications, une pour l’addition (voir ci-dessous), l’autre pour la soustraction.
Ce que j’aimerais faire, c’est n’en avoir qu’une seule et passer le signe de l’opération en paramètre, ce qui pourrais me servir par la suite pour d’autres opérations…
function donne_reponse_add(i) {
var resultat, rep;
resultat = parseInt(document.getElementsByName("a")[i].value,10) + parseInt(document.getElementsByName("b")[i].value,10);
rep = document.getElementsByName("r")[i].value;
if ((resultat == rep) & (rep.length>0)) {
document.img[i].src = 'on.gif';
}
else {document.img[i].src = 'off.gif'}
}
Si tu veux quelque chose de vraiment générique, tu peux utiliser la fonction “Eval”, qui exécute le code Javascript passé en paramètre. Ca donnerait donc quelque chose du genre :
Au lieu de passer le signe de l’opération en paramètre, tu passes 1 ou -1, et tu en fais le produit par ta deuxième valeur récupérée avant de faire ta somme
A termes, peut-être pas, mais j’ai commencé par ces deux là, qui sont techniquement les plus compliquées.
Pour la multiplication, la règle est plutôt très simple ; je trouve qu’il n’est pas très pertinent de proposer ce genre d’exercice.[quote=“Sans-Nom”]
Petite remarque: utilise l’attribut id et document.getElementById :
Et ainsi: parseInt(document.getElementById(‘foobar’).value);
[/quote]
Le problème c’est que j’ai mis 5 calculs sur la page, que je fais remplir aléatoirement.
Le getlEmentsByName me permet d’additionner deux vecteurs colonnes coordonnées par coordonnées et de comparer à celle du vecteur résultat.
Sinon : quelle est la différence fondamentale entre getElementBy Id et getElementsByName ?
Hé bien la différence est simple : dans un cas (getElementsByName) tu récupère tous les éléments qui pour nom (name) sous forme de tableau, alors que dans l’autre tu ne récupère qu’un seul élément identifié de manière unique (foobar dans mon exemple)
mais si je comprend bien ton cas, tu as un tableau de plusieurs éléments, donc ton utilisation est peut-être bonne. mais si tu n’as qu’un seul élément, getElementById est mieux.
C’est sûr qu’il doit y avoir plusieurs manières d’aboutir au même résultat.
J’ai trouvé cette solution (les cours de C++ de la fac sont un peu loin, alors je fais avec mes souvenirs :icon_biggrin:)
var Operator = {
Add: {eval : function (a, b) {return a + b;}},
Substract: {eval : function (a, b) {return a - b;}},
Multiply: {eval : function (a, b) {return a * b;}},
Divide: {eval : function (a, b) {return a / b;}}
};
function donne_reponse(i, op) {
var a = parseInt(document.getElementsByName("a")[i].value,10);
var b = parseInt(document.getElementsByName("b")[i].value,10);
var resultat = op.eval(a, b);
var rep = document.getElementsByName("r")[i].value; // pense bien à la logique si tu fais un parseInt plus haut, faut le faire ici.
if ((resultat == rep) & (rep.length>0)) {
document.img[i].src = 'on.gif';
} else {document.img[i].src = 'off.gif'}
}