Здравствуйте!
Подскажите пожалуйста, по двум вопросам:
Имеется калькулятор:
<from id = 'calculator'>
<table>
<tr>
<td>
<div align="center">
<input id="screen" type="text" value="" size="16" class="display" readonly="readonly" />
</div>
</td>
</tr>
<tr>
<td class="buttons">
<div align="center">
<input id="btn_1" type="button" value="1" />
<input id="btn_2" type="button" value="2" />
<input id="btn_3" type="button" value="3" />
<input id="add" type="button" value="+" class="operator" />
</div>
<div align="center">
<input id="btn_4" type="button" value="4" />
<input id="btn_5" type="button" value="5" />
<input id="btn_6" type="button" value="6" />
<input id="sub" type="button" value=" - " class="operator" />
</div>
<input id="btn_7" type="button" value="7" />
<input id="btn_8" type="button" value="8" />
<input id="btn_9" type="button" value="9" />
<input id="mult" type="button" value=" * " class="operator" />
<div align="center">
<input id="clr" type="button" value=" c " class="clear" />
<input id="btn_0" type="button" value="0" />
<input id="calculate" type="button" value=" = " class="eval" />
<input id="div" type="button" value=" / " class="operator" />
</div>
</td>
</tr>
</table>
</from>
var a,b,c;
var action = '';
function getValue(id) {
var res = document.getElementById(id).value - '';
if (!isNaN(res))
return res;
}
function PutNum(val) {
document.getElementById("screen").value = (document.getElementById("screen").value + val)-0;
}
function add () {
a = getValue("screen");
document.getElementById("screen").value = 0;
action = "+";
}
function sub() {
a = getValue("screen");
document.getElementById("screen").value = 0;
action = "-";
}
function mult() {
a = getValue("screen");
document.getElementById("screen").value = 0;
action = "*";
}
function div() {
a = getValue("screen");
document.getElementById("screen").value = 0;
action = "/";
}
function clr() {
document.getElementById("screen").value = 0;
}
function calculate() {
b = getValue("screen");
switch(action) {
case "+":
c = a + b;
break;
case "-":
c = a - b;
break;
case "*":
c = a * b;
break;
case "/":
if (b == 0) {
alert('Division durch Null kann nicht sein!');
}
else {
c = a / b;
}
break;
}
document.getElementById("screen").value = c;
}
window.onload = function () {
for (var i = 0; i < 10; i++) {
(function (val) {
document.getElementById("btn_" + val).onclick = function () {
PutNum(val);
}
})(i);
}
document.getElementById("add").addEventListener("click", add);
document.getElementById("calculate").addEventListener("click", calculate);
document.getElementById("sub").addEventListener("click", sub);
document.getElementById("mult").addEventListener("click", mult);
document.getElementById("div").addEventListener("click", div);
document.getElementById("clr").addEventListener("click", clr);
}
1 -й Вопрос что делает функция:
function PutNum(val) {
document.getElementById("screen").value = (document.getElementById("screen").value + val)-0;
Как я понимаю: велью а + атрибут велью б и минус 0.
Можно ли как то проще написать или это вполне адекватно? ))
В исполнении 0 получается промежуточное значение, т.е. оператор, как его заменить на само значение оператора, чтоб вместо ноля в калькуляторе отображался + - / *. Пробовал заменить, но минус считает криво.
2-й Вопрос, что делает эта функция, для чего используется цикл:
window.onload = function () {
for (var i = 0; i < 10; i++) {
(function (val) {
document.getElementById("btn_" + val).onclick = function () {
PutNum(val);
}
})(i);
}
document.getElementById("add").addEventListener("click", add);
document.getElementById("calculate").addEventListener("click", calculate);
document.getElementById("sub").addEventListener("click", sub);
document.getElementById("mult").addEventListener("click", mult);
document.getElementById("div").addEventListener("click", div);
document.getElementById("clr").addEventListener("click", clr);
}
3 - й Вопрос, можно ли этот код допиписать с использованием методов:
function Calculator() {
var methods = {
"+" : function(a,b) {
return a + b;
},
"-" : function(a,b) {
return a - b;
},
"*" : function(a,b) {
return a * b;
},
"/" : function(a,b) {
return a / b;
}
}
}
Заранее очень Благодарен!