Показать сообщение отдельно
  #24 (permalink)  
Старый 04.02.2016, 14:12
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Вот на работающем примере сразу стали понятны ваши проблемы.
Нельзя смешивать в одном input значения и операции, т.к. в результате происходит задвоение операторов. Их, конечно, легко отфильтровать при вводе данных из input, но возникает другая проблема: минус может быть как оператором, так и частью значения, например, как результат вычисления 1-2=-1.
Поэтому операторы лучше показывать в другом input. При этом бонус - появляется возможность вести полный протокол
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Calculator</title>
</head>

<body>
    <table>
        <tr>
            <td>
               <input id="action"  type="text" value="" size="16" class="display" readonly="readonly" />
            </td>
            <td>
                    <input id="screen"  type="text" value="" size="16" class="display" readonly="readonly" />
            </td>
        </tr>
        </table>
        <table>
        <tr>
            <td><input type="button" value="1" onclick="addInput(1)"/></td>
            <td><input type="button" value="2" onclick="addInput(2)"/></td>
            <td><input type="button" value="3" onclick="addInput(3)" /></td>
            <td><input type="button" value="+" class="operator" onclick="add()" /></td>
        </tr>
        <tr>
            <td><input type="button" value="4" onclick="addInput(4)" /></td>
            <td><input type="button" value="5" onclick="addInput(5)" /></td>
            <td><input type="button" value="6" onclick="addInput(6)" /></td>
            <td><input type="button" value=" - " onclick="sub()" class="operator" /></td>
        </tr>
        <tr>
            <td><input type="button" value="7" onclick="addInput(7)" /></td>
            <td><input type="button" value="8" onclick="addInput(8)" /></td>
            <td><input type="button" value="9" onclick="addInput(9)" /></td>
            <td><input type="button" value=" * " onclick="mult()" class="operator" /></td>
        </tr>
        <tr>
            <td><input type="button" value=" c " onclick="clr()" class="clear" /></td>
            <td><input type="button" value="0" onclick="addInput(0)" /></td>
            <td><input type="button" value=" = " onclick="calculate()" class="eval" /></td>
            <td><input type="button" value=" / " onclick="div()" class="operator" /></td></td>
        </tr>
    </table>
</body>
<script>
    "use strict";

    var a, b, c;
    var operator;

    function getValue(value) {
        var res = parseInt(document.getElementById(value).value);
        if (res == res)
            return res;
    }

 
    function addInput(val) {
        document.getElementById("screen").value = document.getElementById("screen").value + val;
        document.getElementById("action").value = document.getElementById("action").value + val;
    }

    function add() {
        a = getValue("screen");
        document.getElementById("action").value = document.getElementById("action").value + "+";
        document.getElementById("screen").value = "";
        operator = "+";
    }

    function sub() {
        a = getValue("screen");
        document.getElementById("action").value = document.getElementById("action").value + "-";
        document.getElementById("screen").value = "";
        operator = "-";
    }

    function mult() {
        a = getValue("screen");
        document.getElementById("action").value = document.getElementById("action").value + "*";
        document.getElementById("screen").value = "";
        operator = "*";
    }

    function div() {
        a = getValue("screen");
        document.getElementById("action").value = document.getElementById("action").value + "/";
        document.getElementById("screen").value = "";
        operator = "/";
    }

    function clr() {
        document.getElementById("action").value = "";
        document.getElementById("screen").value = "";
    }

    function calculate() {
         b = getValue("screen");
        switch (operator) {
            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;
        document.getElementById("action").value = document.getElementById("action").value + "=" + c;
    }
</script>
</html>
Ответить с цитированием