Ah, j'ai compris, on parle pas du même post ! Moi je fais référence au post n°13.
Ce code est le même que le source dans le 13...
Version imprimable
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 :mouarf:
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 :ccool:Code:
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>
:vomi:Code:valLouches = eval(valLouches);
:vomi::vomi:
:vomi::vomi::vomi:
je confirme tu n'as pas lu mon code
ou eventuellement un parseInt ou parseFloatCode:
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 :aie:
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 ? 8-)
Ou avec un exemple du code final remanié selon tes critères pour voir la différence.
Mais faudra me convaincre :calim2:
premièrement eval te bouffe de la ressoucre inutilement
ouCode:var truc = +varalpha
est moins gourmand et te retourne imanquablement du numériqueCode: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 :ccool:
@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:
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:
1
2
3
4
5
6 >>> speedTest(cast) "61.239s" >>> speedTest(positivize) "15.54s" >>> speedTest(multiply) "11.327s"
multiply vainqueur par KO :aie:
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)...