Ouf ! J'ai compris et trouvé grâce à l'intervention d'Algori qui explique la fonction eval().
Quelle galère pour la simple addition de deux variables implicitements numériques
Bref, pour d'autres débutants qui passeraient par là, et pour leur éviter des pertes de temps inutiles, le script final donne ceci:
Bon dev à tous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <script type="text/javascript"> function calculer() { var valCalories= 0; var valLouches= 0; var newVal = 0; document.forms['simulateur'].elements['patates'][0].checked && (valCalories +=450) ; document.simulateur.carottes[0].checked && (valCalories +=120) ; document.simulateur.courges.checked && (valCalories +=250) ; document.simulateur.oignons.checked && (valCalories +=100) ; document.simulateur.poireaux.checked && (valCalories +=150) ; document.simulateur.sel.checked && (valCalories +=30) ; valCalories = eval(valCalories); // On s'assure d'avoir un nombre valLouches = document.forms['simulateur'].elements['nbrLouches'].value ; valLouches = eval(valLouches); // On s'assure d'avoir un nombre newVal = eval(valCalories+valLouches) ; alert("Votre total est de: " + newVal + " pseudo calories pour une assiette !"); } </script> </head> <body> <form name="simulateur"> <p><b>Le premier simulateur de soupe !</b></p> <p>Mettrez-vous des pommes de terre dans votre soupe ? <br> <input type="radio" name="patates" value="0" checked> Oui <input type="radio" name="patates" value="1"> Non </p> <p>Mettrez-vous des carottes dans votre soupe ? <br> <input type="radio" name="carottes" value="0" checked> Oui <input type="radio" name="carottes" value="1"> Non </p> <p><b>Options</b></p> <input type="checkbox" name="courges" value="0"> Ajouter des courges ? <br> <input type="checkbox" name="oignons" value="1"> Ajouter des oignons ? <br> <input type="checkbox" name="poireaux" value="2"> Ajouter des poireaux ? <br> <input type="checkbox" name="sel" value="3"> Ajouter du sel ? <br> <p><b>Sélectionnez le nombre de louches par assiette</b></p> <select name="nbrLouches" size="1"> <option value="50" id="1" selected="selected">1</option> <option value="90" id="2">2</option> <option value="130" id="3">3</option> <option value="185" id="4">4</option> <option value="245" id="5">5</option> <option value="280" id="6">6</option> </select> <p><input type="button" value="calculer" onclick="calculer()"></p> </form> </body> </html>![]()
Code : Sélectionner tout - Visualiser dans une fenêtre à part valLouches = eval(valLouches);
je confirme tu n'as pas lu mon code
ou eventuellement un parseInt ou parseFloat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3valLouches = +valLouches; ou valLouches = valLouches *1 ;
mais pitié pas de éval pour ça !!!!!
Arf on vient encore d'en perdre un du coté obscur
il te plait pas le + ???
Sûr qu'il me plaît pas ! Je m'en méfie comme de la peste d'un + pareil qui, selon ses humeurs, agit en & de concaténation comme d'autres langages...
Mais bon, je veux bien faire un effort si tu m'expliques ce que ça change ?
Ou avec un exemple du code final remanié selon tes critères pour voir la différence.
Mais faudra me convaincre![]()
premièrement eval te bouffe de la ressoucre inutilement
ou
Code : Sélectionner tout - Visualiser dans une fenêtre à part var truc = +varalpha
est moins gourmand et te retourne imanquablement du numérique
Code : Sélectionner tout - Visualiser dans une fenêtre à part var truc = varalpha *1
de plus eval est une porte ouverte à l'injection de javascript
Bien, bien, bien, je vais réfléchir à tout cela, j'ai encore tant à apprendre...
Bon dev à tous![]()
@QuienSabe : eval is evil, comme la peste l’éviter tu dois. C’est une erreur que font tous les débutants, je l’ai faite moi-même (dans un autre langage certes) mais plus tôt on l’oublie mieux c’est.
@SpaceFrog : j’ai toujours trouvé plus lisible de faire un cast, mais puisqu’on parle d’optimisation, j’ai fait un petit test :
Code js : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 function speedTest( f ) { var d = new Date(); for (var i = 1e7; i--;) { f(); }; return (new Date() - d) / 1000 + 's'; }; function cast() { return Number('42') }; function positivize() { return +'42' }; function multiply() { return '42'*1 };
Code console : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 >>> speedTest(cast) "61.239s" >>> speedTest(positivize) "15.54s" >>> speedTest(multiply) "11.327s"
multiply vainqueur par KO![]()
Entendu Watilin, c'est bien noté concernant eval().
Eval ? J'ai dit "eval", comme c'est bizarre
Merci à tous!
PS: Y a-t-il une section "Débutants" quelque part dans le forum ?
J'ai bien vu les tutoriels et la FAQ (qui sont très bien), mais les questions de débutants sont une mine d'enseignements pour moi (à faire, ne pas faire, éviter, à fuir, etc. en disent long)...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager