Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Усовершенствовать простой javascript Калькулятор! (https://javascript.ru/forum/events/60550-usovershenstvovat-prostojj-javascript-kalkulyator.html)

hbsv 06.01.2016 12:21

Усовершенствовать простой javascript Калькулятор!
 
Здравствуйте Форумчане!

Нужна небольшая помощь, решил начать изучать "html css javascript",

и получил задание написать простейший калькулятор, за основу взял html + javascript:

<body>

<form name="taschenrechner" id="calculator">
          <table>
          <tr>
          <td>
          
                 <input type="text" name="input" size="16" class="display">
               
                             
          </td>
          </tr>
          <tr>
          <td class="buttons">
      

          <input type="button" name="ein" value="1" OnClick="taschenrechner.input.value += '1'">
          <input type="button" name="zwei" value="2" OnClick="taschenrechner.input.value += '2'">
          <input type="button" name="drei" value="3" OnClick="taschenrechner.input.value += '3'">
          <input type="button" name="add" value="+" onclick="taschenrechner.input.value += '+'" >
          <br>
          <input type="button" name="vier" value="4" OnClick="taschenrechner.input.value += '4'">
          <input type="button" name="funf" value="5" OnClick="taschenrechner.input.value += '5'">
          <input type="button" name="sechs" value="6" OnClick="taschenrechner.input.value += '6'">
          <input type="button" name="sub" value="-" OnClick="taschenrechner.input.value += '-'">
          <br>
          <input type="button" name="sieben" value="7" OnClick="taschenrechner.input.value += '7'">
          <input type="button" name="acht" value="8" OnClick="taschenrechner.input.value += '8'">
          <input type="button" name="neun" value="9" OnClick="taschenrechner.input.value += '9'">
          <input type="button" name="zehn" value="x" OnClick="taschenrechner.input.value += '*'">
          <br>
          <input type="button" name="clear" value="c" OnClick="taschenrechner.input.value = ''">
          <input type="button" name="null" value="0" OnClick="taschenrechner.input.value += '0'">
          <input type="button" name="macht" value="=" OnClick="taschenrechner.input.value = eval(taschenrechner.input.value)">
          <input type="button" name="div" value="/" OnClick="taschenrechner.input.value += '/'">
      </td>
      </tr>
      </table>

</form>


</body>


и css:

@charset "utf-8";
/* CSS Document */


* {
	margin: 0;
	padding: 0;
	box-sizing: border-box;
	
	
	font: bold 14px Arial, sans-serif;
}


html {
	height: 100%;
	background: white;
	background: radial-gradient(circle, #fff 20%, #ccc);
	background-size: cover;
}

#calculator * {font-size: 20px;}
#calculator table {
	border: solid 3px silver; 
	border-spacing: 3px; 
	background-color: #EEE; 
	}
#calculator table td {border-spacing: 3px;}
#calculator table {margin: 100px auto;}
input.display {
	width: 275px; 
	height:40px; 
	text-align: right;
	}
td.buttons {border-top: solid 1px silver;}	
input[type= button] {
	width: 65px; 
	height: 50px;
	}

</style>


И мне кажется, что выглядит все очень слабенько, поэтому хочу до усовершенствовать, а именно:

1) Улучшить javascript путем вынесения обработчиков во внешние функции (отделение во внешний файл);
2) Вместо имен объектов использовать идентификаторы и обращаться к ним через GetElementByID;

PS (Так же брал другой скрипт, красивый калькулятор с thecodeplayer , мне все очень понравилось, потратил на него 2 дня, но javascript показался мне очень сложным, не могу его понять, я мне нужно будет потом объяснить что к чему) (Написал для того, что может кто знает этот скрипт и сможет мне объяснить)))

Обращаюсь на форум как в последнюю инстанцию, т.к. времени у меня осталось до вечера, и смогу ли все успеть не факт, поэтому буду очень рад любому совету и любой помощи.

Заранее очень благодарен
С ув. Сергей!

JSN 07.01.2016 00:00

Здравствуйте, Сергей.
Я извиняюсь, если поздновато, но минут 15 назад

Сам я бы написал по-другому, но если пересмотреть ваш код то вот мои мысли:
Code

А в плане общих советов по изучению программирования - начинайте с теории. Математика, структуры данных и алгоритмы. В частности калькулятор можно написать намного лучше используя обратную польскую запись, например.

Но это все лирика - удачи. Если есть вопросы - пишите

Lemme 07.01.2016 01:14

JSN, а еще лучше использовать http://learn.javascript.ru/event-delegation, ибо

Все это

Цитата:

OnClick="addInput(x)"
заменяется этим

document.getElementById('calculator').onclick = function(e) {
    // TODO
    this.input.value += e.target.value;
}

hbsv 29.01.2016 23:16

Цитата:

Сообщение от JSN (Сообщение 402828)
Здравствуйте, Сергей.
Я извиняюсь, если поздновато, но минут 15 назад

Сам я бы написал по-другому, но если пересмотреть ваш код то вот мои мысли:
Code

А в плане общих советов по изучению программирования - начинайте с теории. Математика, структуры данных и алгоритмы. В частности калькулятор можно написать намного лучше используя обратную польскую запись, например.

Но это все лирика - удачи. Если есть вопросы - пишите

Не могу заставить функцию "clear" работать и после запятой выставляет много нулей.

Если не сложно объясни пожалуйста логику:

function addInput(x) {
    input.value += x;
    if (!c)
        a[0] = a[0] * 10 + +x;
    else
        a[1] = a[1] * 10 + +x;
}

hbsv 29.01.2016 23:17

Цитата:

Сообщение от Lemme (Сообщение 402838)
JSN, а еще лучше использовать http://learn.javascript.ru/event-delegation, ибо

Все это



заменяется этим

document.getElementById('calculator').onclick = function(e) {
    // TODO
    this.input.value += e.target.value;
}

Можно один пример, как заменить, я по пробовал но не получилось.


Часовой пояс GMT +3, время: 19:29.