2017-10-22 16 views
-1

私はJavascript電卓を構築しようとしていますが、eval()が使用している方法で動作しないため動作しません。私のコンソールでは、それは私に入力フィールドの単一の値を与えています。以下は私が使用しているコードです。 JavaScriptでJavascript電卓 - eval()が動作しない

<!DOCTYPE html> 
<html> 
<head> 
    <title>Test</title> 
</head> 
<body> 
    <input type="text" name="" disabled="true" id="inputField"> 
    <button id="btn5" value="5">5</button> 
    <button id="btn2" value="2">2</button> 
    <button id="operator" value="+">+</button> 
    <button id="eval">=</button> 
</body> 

<script type="text/javascript"> 
    var btn5 = document.getElementById('btn5'); 
    var btn2 = document.getElementById('btn2'); 
    var inpField = document.getElementById('inputField'); 
    var operator = document.getElementById('operator'); 
    var eval = document.getElementById('eval'); 

    btn5.addEventListener('click', btn5Function); 
    btn2.addEventListener('click', btn2Function); 
    operator.addEventListener('click', operatorFunction); 
    eval.addEventListener('click', evalFunction) 
    //inpField.value = ""; 

    function btn5Function() { 
     inpField.value += btn5.value; 
    } 

    function btn2Function() { 
     inpField.value += btn2.value; 
    } 

    function operatorFunction() { 
     inpField.value += operator.value; 
    } 

    function evalFunction() { 
     var storeVal = parseInt(inpField.value); 
     console.log(storeVal); 
     var cal = eval(storeVal); 
     inpField.value = cal; 
     } 

</script> 

</html> 

答えて

2

strictモードの範囲外では、JavaScript 機能キーワードを上書きすることができます。変数はあなたの問題が離れてフェードさせなければならないことを名前変更

var eval = document.getElementById('eval'); 

:この場合、あなたはeval関数をオーバーライドしています。

私はまた、あなたがparseInt機能の使用について100%の自信を持っていないことに気づいた、あなたはhere

+0

が機能しません。それは私に最初に押された数字を与えています。たとえば、「5」を押してから「+」を押すと「2」を押すと、「5」だけが表示されます。 –

+0

あなたは 'parseInt'を使っているからです。 'parseInt'は左から右の数字を探し、それが数字でない文字を満たすときに止まります。だから、 '2 + 3'の場合、関数は最初の文字' 2'を読みます。それはOKです。数字以外の文字 '+'を満たし、ここで停止して2を返します。 値は整数に変換されます。なぜなら 'eval'は文字列を期待しているからです。 –

+0

@CristianTraìnaうん、うまくいきました。 Thnx –

0

詳細を読むことができます私はこの問題は、あなたがそれ故に、オペレータから成る文字列上のparseIntしようとしているだと思います問題:

var storeVal = parseInt(inpField.value); <-- this will not work. 
関連する問題