-5

しばらくの間、この電卓を作成しようとしましたが、すべてが適切に見えますが、コードを何度調べても機能しません。私はこれに怒っています!これがうまくいかないのはどうしてですか?[計算] を押しても何も起こりません。これで私を助けてください!

JavaScript は次のとおりです。

function calc() {
    var num1, num2;
    var sign = "+";
    var result;

    function getNum1() {
        num1 = document.getElementById('num1').value;
        return Number(num1);
    }
    function getNum2() {
        num2 = document.getElementById('num2').value;
        return Number(num2);
    }
    function getSign() {
        sign = document.getElementById('sign').value;
        return sign;
    }
    function setResult() {
        document.getElementById('result').value = result;
    }
    function doCalc() {

        var num1 = getNum1();
        var num2 = getNum2();

        if(getSign() == "*") {
            result = num1 * num2; 
        }else if(getSign() == "/") {
            result = num1 / num2;
        }else if(getSign() == "-") {
            result = num1 - num2; 
        }else{
            result = num1 + num2;
        }
        setResult();
    }
}
4

3 に答える 3

1

を呼び出している場合はdoCalc()、関数内にスコープが設定されているため、到達できませんcalc()

を呼び出している場合calc()、 を呼び出すことはないため、何もしませんdoCalc()

doCalc()関数の最後に呼び出しを追加すると、関数が到達calc()可能であれば機能します。calc()

于 2013-01-17T00:42:46.897 に答える
1

.valueフォーム フィールドと.innerHTMLその他すべて ( spanpなど)で必ず使用してください。.innerHTML要素の内部を取得または設定します。

また、送信ボタンにイベント ハンドラがあることを確認してonclickください -- 最も簡単な方法は<input onclick="doCalc();" ... />です。

于 2013-01-17T00:45:49.720 に答える
0

calc() 関数を切り離してみます。ここにそれについて行く1つの方法があります。

var Calculator = {
    "eval" : function(operator, x, y) {
                 switch( operator ) {
                     case "+":
                         return (x + y);
                     case "-":
                         return (x - y);
                 }
             }
}

さらに良いことに、

    var Calculator = {
    "eval" : function(operator) {
                 var args = Array.prototype.slice.call(arguments);
                 args.splice(0,1); // lazy hack to remove the argument for the operator

                 switch( operator ) {
                     case "+":
                         return args.reduce( function(x,y){ return (x + y); } );
                     case "-":
                         return args.reduce( function(x,y){ return (x - y) } );
                 }
             }
}

これにより、再利用とテストがはるかに簡単になります。

var answer = Calculator.eval( '+', 20, 20, 2 );  // yay, prefix notation

2 番目のバリエーションでは、配列を 1 つの値に縮小する高階関数 'reduce' を使用します。

reduce がどのように機能するかの手順は次のとおりです。もう少しわかりやすくするために、ラムダ関数を取り出しました。

var arr = [20, 20, 20];
function sum(x, y){ return (x + y); }

function reduceMagic(arr){
    var temp = sum(arr[0], arr[1]);  // temp -> 40
    temp =  sum(temp, arr[2]);       // temp -> 42
    return temp;
}
于 2013-01-17T02:46:04.833 に答える