login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Optellen, maar eval vermijden

Offline ikki007 - 24/01/2010 14:37 (laatste wijziging 24/01/2010 14:37)
Avatar van ikki007Gouden medailleGouden medaille

PHP ver gevorderde
Hoi,

Ik ben niet thuis in javascript maar in dit geval wil ik het toch even gebruiken.
Echter ik loop tegen een probleem aan.

Ik wil $("#memoryPrice").val() en $("#harddiskPrice").val() optellen, zodra ik hier een plusteken tussen plaats print hij ze gewoon naast elkaar.
Waarschijnlijk omdat het als een string wordt beschouwd. Nu heb ik eval() om beide heengezet, alleen ik las ook dat eval() duidt op onvoldoende kennis.
Vandaar hier mijn vraag hoe dit makkelijk/beter kan.



Ikki.
  1. function calculateTotalPrice() {
  2. $("#totalPrice").val(eval($("#memoryPrice").val())+eval($("#harddiskPrice").val()));
  3. }

4 antwoorden

Gesponsorde links
Offline Martijn - 24/01/2010 14:55 (laatste wijziging 24/01/2010 14:56)
Avatar van Martijn Crew PHP Het is dus alleen optellen? Dan zou je kunnen regexxen dan alleen 0-9 en + overblijft, dan string.split("+"); en dan de array bij elkaar optellen

ik weet niet of je weet waarom eval niet zo aangenaam is, maar t komt er ongeveer op neer dat je de voordeur open zet voor mensen die wat slechts met je site willen. Je kan er allemaal zooi in gooien en dat wordt dan uitgevoerd
Offline ikki007 - 24/01/2010 15:23
Avatar van ikki007 Gouden medailleGouden medaille

PHP ver gevorderde
Nouja, als het goed is bevat de input sowieso al alleen 0-9.
Het gaat om de onderstaande code (javascript is niet mijn ding, dus sorry als het een beetje inefficient is, kritiek is welkom. en die text/prices ga ik nog ophalen mbv json).

  1. <script type="text/javascript">
  2. var memoryText = new Array("256 MB", "512 MB", "1024 MB", "2048 MB", "4096 MB", "8192 MB", "16384 MB");
  3. var memoryPrice = new Array("1.00", "2.00", "4.00", "5.50", "10.00", "20.00", "35.00");
  4.  
  5. var harddiskText = new Array("5 GB", "10 GB", "25 GB", "50 GB", "100 GB", "250 GB", "500 GB", "1 TB");
  6. var harddiskPrice = new Array("0.50", "1.00", "2.00", "4.00", "7.50", "15.00", "27.50", "40.00");
  7.  
  8. $(function() {
  9. function calculateTotalPrice() {
  10. $("#totalPrice").val(eval($("#memoryPrice").val())+eval($("#harddiskPrice").val()));
  11. }
  12.  
  13. $("#memorySlider").slider({
  14. value:0,
  15. min: 0,
  16. max: memoryText.length-1,
  17. step: 1,
  18. slide: function(event, ui) {
  19. $("#memoryText").val(memoryText[ui.value]);
  20. $("#memoryPrice").val(memoryPrice[ui.value]);
  21.  
  22. calculateTotalPrice();
  23. }
  24. });
  25.  
  26. $("#harddiskSlider").slider({
  27. value:0,
  28. min: 0,
  29. max: harddiskText.length-1,
  30. step: 1,
  31. slide: function(event, ui) {
  32. $("#harddiskText").val(harddiskText[ui.value]);
  33. $("#harddiskPrice").val(harddiskPrice[ui.value]);
  34.  
  35. calculateTotalPrice();
  36. }
  37. });
  38.  
  39. $("#memoryText").val(memoryText[$("#memorySlider").slider("value")]);
  40. $("#memoryPrice").val(memoryPrice[$("#memorySlider").slider("value")]);
  41.  
  42. $("#harddiskText").val(harddiskText[$("#harddiskSlider").slider("value")]);
  43. $("#harddiskPrice").val(harddiskPrice[$("#harddiskSlider").slider("value")]);
  44.  
  45. calculateTotalPrice();
  46. });
  47. </script>
Offline YesItIsChris - 24/01/2010 19:02 (laatste wijziging 24/01/2010 19:04)
Avatar van YesItIsChris Nieuw lid Plaatscode: 138519

  1. function calculateTotalPrice() {
  2. var totalPrice = parseInt( $("#memoryPrice").val() ) + parseInt( $("#harddiskPrice").val() );
  3. $("#totalPrice").val( totalPrice );
  4. }


Citaat:
ik weet niet of je weet waarom eval niet zo aangenaam is, maar t komt er ongeveer op neer dat je de voordeur open zet voor mensen die wat slechts met je site willen. Je kan er allemaal zooi in gooien en dat wordt dan uitgevoerd


Is tog client side...
Offline ikki007 - 24/01/2010 19:19
Avatar van ikki007 Gouden medailleGouden medaille

PHP ver gevorderde
Ik heb parseFloat gebruikt ipv parseInt, anders wordt 1.50 1.

En inderdaad, ik vond het ook al een beetje raar aangezien het client sided is ;) Daar kan je sowieso altijd wel uitvoeren wat je wilt.

  1. function calculateTotalPrice() {
  2. price = parseFloat(memoryPrice[$("#memorySelectedIndex").val()]) +
  3. parseFloat(harddiskPrice[$("#harddiskSelectedIndex").val()]) +
  4. parseFloat(trafficPrice[$("#trafficSelectedIndex").val()]) +
  5. parseFloat(ipaddressesPrice[$("#ipaddressesSelectedIndex").val()]);
  6.  
  7. price = price.toFixed(2);
  8. price = price.replace(".", ",");
  9. price = price.replace(",00", ",-");
  10.  
  11. $("#totalPrice").text(price);
  12. }
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.198s