Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kalkulator w JS
Forum PHP.pl > Inne > Oceny
sebekzosw
Proszę o ocenę kalkulatora w JS smile.gif

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  3.  
  4. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  5. <title>Kalkulator</title>
  6. <style type="text/css">
  7. form
  8. {
  9. width: 227px;
  10. height: 321px;
  11. border: 1px solid #000;
  12. text-align: center;
  13. }
  14.  
  15. input[type=text]
  16. {
  17. margin-top: 10px;
  18. padding-top: 20px;
  19. width: 189px;
  20. height: 29px;
  21. text-align: right;
  22. }
  23.  
  24. input[type=button]
  25. {
  26. width: 56px;
  27. height: 40px;
  28. text-align: center;
  29. }
  30. </style>
  31. <script type="text/javascript" src="kalkulator.js"></script>
  32. </head>
  33.  
  34.  
  35. <form action="" method="post">
  36. <div>
  37. <input id="phrase" type="text" disabled="disabled" value="" />
  38. </div>
  39.  
  40. <div>
  41. <input type="button" onclick="delString(); return false;" name="delStringA" value="&lt;-" />
  42. <input type="button" onclick="reset(); return false;" name="resetAll" value="C" />
  43. <input type="button" onclick="result(); return false;" name="mathResult" value="=" />
  44. </div>
  45.  
  46. <div>
  47. <input type="button" name="action" value="7" />
  48. <input type="button" name="action" value="8" />
  49. <input type="button" name="action" value="9" />
  50. </div>
  51.  
  52. <div>
  53. <input type="button" name="action" value="4" />
  54. <input type="button" name="action" value="5" />
  55. <input type="button" name="action" value="6" />
  56. </div>
  57.  
  58. <div>
  59. <input type="button" name="action" value="1" />
  60. <input type="button" name="action" value="2" />
  61. <input type="button" name="action" value="3" />
  62. </div>
  63.  
  64. <div>
  65. <input type="button" name="action" value="0" />
  66. <input type="button" name="action" value="+" />
  67. <input type="button" name="action" value="-" />
  68. </div>
  69.  
  70. <div>
  71. <input type="button" name="action" value="/" />
  72. <input type="button" name="action" value="*" />
  73. <input type="button" name="action" value="." />
  74. </div>
  75. </form>
  76.  
  77. </body>
  78. </html>


[JAVASCRIPT] pobierz, plaintext
  1. //definujemy tablice znaków
  2. var keys = new Array();
  3. keys[96] = 0;
  4. keys[97] = 1;
  5. keys[98] = 2;
  6. keys[99] = 3;
  7. keys[100] = 4;
  8. keys[101] = 5;
  9. keys[102] = 6;
  10. keys[103] = 7;
  11. keys[104] = 8;
  12. keys[105] = 9;
  13. keys[106] = '*';
  14. keys[107] = '+';
  15. keys[109] = '-';
  16. keys[110] = '.';
  17. keys[111] = '/';
  18.  
  19. document.onkeydown = checkKeycode;
  20.  
  21. window.onload = function()
  22. {
  23. inputs = document.getElementsByTagName('input');
  24. for(i=0; i<inputs.length; i++)
  25. {
  26. if(inputs[i].getAttribute("name") != null && inputs[i].getAttribute("name") == "action")
  27. {
  28. inputs[i].onclick = function ()
  29. {
  30. addAction(this.value);
  31. }
  32. }
  33. }
  34. }
  35.  
  36. function $(id)
  37. {
  38. return document.getElementById(id);
  39. }
  40.  
  41. function inArray(needle, haystack)
  42. {
  43. var length = haystack.length;
  44. for(var i = 0; i < length; i++)
  45. {
  46. if(haystack[i] == needle)
  47. return true;
  48. }
  49.  
  50. return false;
  51. }
  52.  
  53. function checkKeycode(e)
  54. {
  55. var keycode;
  56.  
  57. if (window.event)
  58. keycode = window.event.keyCode;
  59. else if (e)
  60. keycode = e.which;
  61.  
  62. if(keycode == 8) //jeżeli kasujemy ostatni znak Backspace
  63. delString();
  64. else if(keycode == 13) //jeżeli klikamy enter w celu sprawdzeniu wyniku
  65. result();
  66. else if((keycode >= 96) && (keycode <= 114))
  67. {
  68. if(typeof keys[keycode] != "undefined")
  69. addAction(keys[keycode]);
  70. }
  71. }
  72.  
  73. //wykonywanie działań
  74. function result()
  75. {
  76. $ob = $('phrase');
  77.  
  78. if($ob.value.length > 0)
  79. {
  80. $result = eval($ob.value);
  81. if(Math.abs($result) == Infinity)
  82. $result = "Nie można dzielić przez 0";
  83.  
  84. $ob.value = $result;
  85. }
  86. else
  87. alert('Podaj jakieś dane!');
  88. }
  89.  
  90. //funkcja dopisująca do pola działanie
  91. function addAction(ob)
  92. {
  93. if($('phrase').value.match(/przez.*?/) != null)
  94. $('phrase').value = '';
  95.  
  96. $how = $('phrase').value.length;
  97. if($how > 0)
  98. {
  99. $last = $('phrase').value.substr($how-1,$how); //sprawdzamy ostatnio wprowadzony znak
  100.  
  101. /*
  102.   sprawdzamy, czy nowy znak do prowadzenia nie jest identyczny do przedostatniego
  103.  
  104.   nie możemy dodać np ** ale możemy dodać np 55 więc należy też sprawdzić czy nowy obiekt jest liczbą, a nie znakiem
  105.   */
  106. if((ob == $last) && isNaN(ob))
  107. ob = '';
  108. }
  109.  
  110. $('phrase').value += ob;
  111. }
  112.  
  113. //funkcja usuwająca ostatni znak
  114. function delString()
  115. {
  116. $how = $('phrase').value.length;
  117. if($how > 0)
  118. $('phrase').value = $('phrase').value.substr(0,$how-1);
  119. }
  120.  
  121. //funkcja resetująca pole z wynikiem
  122. function reset()
  123. {
  124. $('phrase').value = '';
  125. }
[JAVASCRIPT] pobierz, plaintext
Fifi209
Wrzuć na jakiś hosting, bo nie będzie sobie każdy tego sklejał żeby ocenić.
sebekzosw
http://spisula.pl/calc/kalkulator.htm
ShadowD
76675567*/+8 nie da się policzyć. Masa niedociągnięć a to było jedno z nich, nie da się zaznaczyć wyniku itd.

W jakim celu takie urzeczenie? :-) Szczerze to wolę w google wpisać 2*99^3=
skowron-line
To co kolega nade mną + brak możliwości wpisania liczb z klawiatury. Ogólnie bez rewelacji.
sebekzosw
miałem coś takiego jak zajęcia specjalizacyjne i zrobiłem kalkulator, który liczy.

możliwość wpisywania danych z klawiatury jest...
Fifi209
ale tylko na numerycznej, chyba o to im chodziło
markonix
Esc - powinien resetować.

5+5+5 = 155 ?
(pokazało mi kilka razy, nie wiem czemu - tzn. nie umiem odtworzyć kolejności).

Enter mi resetuje wartość, a czasami działa poprawnie.
Ważniejsze przyciski bym zrobił większe (jak na klawiaturze NUM).
nospor
8*5 enter
wynik:405
Coś masz nie tak z tym enterem bo problem identyczny jak post wyżej

w komentarzu masz coś takiego:
Cytat
nie możemy dodać np ** ale możemy dodać np 55 więc należy też sprawdzić czy nowy obiekt jest liczbą, a nie znakiem

No i dobra, ** nie mogę dać, ale już *-+ i owszem.
Mogę również jako pierwszy znak dać * lub każdy inny operator
sebekzosw
poprawki wprowadzone - http://spisula.pl/calc/kalkulator.htm
markonix
Kod
50+50
1008...

Znowu nie umiem odtworzyć sytuacji bo po odświeżeniu jest już ok.

Sugestia: Jeżeli na końcu umieszczam znak i się mylę to fajnie jakby znak był nadpisywany (patrz. Windowsowy Kalkulator)

Nie działa mi C.

Nie wiem, może akurat teraz coś tam skrobiesz i dlatego.
kilas88
To co rzuciło mi się od razu w oko:
- nie dałeś żadnej przestrzeni znakowej, a dodatku używasz popularnych nazw funkcji, jak $
- zamiast == używaj ===
- zamiast składni if (inputs[i].getAttribute("name") != null && inputs[i].getAttribute("name") == "action") {} już lepiej dać if (inputs[i].hasAttribute("name") && inputs[i].getAttribute("name") == "action") {}
skowron-line
http://imageshack.us/f/9/kalkulator.png/ smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.