2017-03-05 10 views
-1

開発ツール/トラブルシューティングでは、電卓がHTMLButtonElement.onclickで定義されていません。私は答えが得られない以外はすべて動作します。誰かが私が間違っていることを見ていますか?私は例に従います、その例は動作します。しかし、私のコードではありません。私は4つのボタンと2つのテキストフィールドを取得しますが、ボタンをクリックするとテキストフィールドに数字が表示されます。Uncaught ReferenceError:HTMLButtonElement.onclickで電卓が定義されていません。

これは前回投稿しましたが、コード全体では初めてでした。私がそれを編集したときだけ。

<!DOCTYPE html> 
     <html> 
     <head> 
      <title>oppg.3</title> 
     </head> 
     <body> 

     <input id="v1" type="text" style="width:5em;"/> 
     <button onclick="calculator.sum();"> + </button> 
     <button onclick="calculator.multiply();"> * </button> 
     <button onclick="calculator.div();">/</button> 
     <button onclick="calculator.mod();"> % </button> 
     <input id="v2" type="text" style="width:5em;"/> 
     <span id="result"> </span> 


     <script type="text/javascript"> 
    var Calculator = function(inp1,inp2,reslt) { 
     this.valinp1 = inp1; 
     this.valinp2 = inp2; 
     this.result = reslt; 
     if (!Calculator.prototype.sum) { 
      Calculator.prototype.sum = function() { 
      var value1 = Number(this.valinp1.value), 
       value2 = Number(this.valinp2.value); 

       this.result.innerHTML = 
       (!/[0-9]/.test(String(value1)) || !/[0-9]/.test(String(value1))) 
       : (value1 + value2); 
      }; 
      Calculator.prototype.multiply = function() { 
       var value1 = Number(this.valinp1.value); 
       var value2 = Number(this.valinp2.value); 
       this.result.innerHTML = 
       (!/[0-9]/.test(string(value1)) || !/[0-9]/.test(string(value1))) 
       :(value1*value2); 

      }; 
      Calculator.prototype.div = function() { 
       var value = Number(this.valinp1.value); 
       var value2 = Number(this.valinp2.value); 
       var restmp = value1/value2; 
       this.result.innerHTML = 
       (!/[0-9]/.test(String(value1)) || !/[0-9]/.test(String(value1)) || value2 === 0) 
       : restmp%1 ? restmp.toFixed(3) : restmp; 
      }; 
      Calculator.prototype.mod = function() { 
       var value1 = Number(this.valinp1.value); 
       var value2 = Number(this.valinp2.value); 
       var restmp = value1%value2; 
       this.result.innerHTML = 
       (!/[0-9]/.test(String(value1)) || !/[0-9]/.test(String(value1)) || value2 === 0) 
       : value1%value2; 

      }; 
      } 
     }; 
     calculator = 
     new Calculator (
      document.getElementById('v1'), 
      document.getElementById('v2'), 
      document.getElementById('result') 
     ); 
     </script> 


     </body> 
    </html> 

答えて

0

ブラウザで開発者ツールを開きます。コンソールを見てください。エラーメッセージを読んでください。 まず最初の問題を修正してください。サブシーケンスの問題は、以前の問題の結果として生じることがよくあります。

SyntaxError: Unexpected token :

以上の便利なエラーメッセージを与えることができたJS Hintてコードを実行します。

Expected '}' to match '{' from line 6 and instead saw ':'.

あなたがternary operatorを書き込もうとしているように見えますが、?文字や代替状態を忘れてしまいました。

あなたはこのミスを何度も繰り返しました。

0
<!DOCTYPE html> 
    <html> 
    <head> 
     <title>oppg.3</title> 
    </head> 
    <body> 

    <input id="v1" type="text" style="width:5em;"/> 
    <button onclick="calculator.sum();"> + </button> 
    <button onclick="calculator.multiply();"> * </button> 
    <button onclick="calculator.div();">/</button> 
    <button onclick="calculator.mod();"> % </button> 
    <input id="v2" type="text" style="width:5em;"/> 
    <span id="result"> </span> 


    <script type="text/javascript"> 
var Calculator = function(inp1,inp2,reslt) { 
    this.valinp1 = inp1; 
    this.valinp2 = inp2; 
    this.result = reslt; 
    if (!Calculator.prototype.sum) { 
     Calculator.prototype.sum = function() { 
     var value1 = Number(this.valinp1.value), 
      value2 = Number(this.valinp2.value); 

      this.result.innerHTML = 
      !/[0-9]/.test(String(value1)) ? !/[0-9]/.test(String(value1)) 
      : (value1 + value2); 
     }; 
     Calculator.prototype.multiply = function() { 
      var value1 = Number(this.valinp1.value); 
      var value2 = Number(this.valinp2.value); 
      this.result.innerHTML = 
      !/[0-9]/.test(String(value1)) ? !/[0-9]/.test(String(value1)) 
      :(value1*value2); 

     }; 
     Calculator.prototype.div = function() { 
      var value = Number(this.valinp1.value); 
      var value2 = Number(this.valinp2.value); 
      var restmp = value1/value2; 
      this.result.innerHTML = 
      !/[0-9]/.test(String(value1)) ? !/[0-9]/.test(String(value1)) || value2 === 0 
      : restmp%1 ? restmp.toFixed(3) : restmp; 
     }; 
     Calculator.prototype.mod = function() { 
      var value1 = Number(this.valinp1.value); 
      var value2 = Number(this.valinp2.value); 
      var restmp = value1%value2; 
      this.result.innerHTML = 
      !/[0-9]/.test(String(value1)) ? !/[0-9]/.test(String(value1)) || value2 === 0 
      : value1%value2; 

     }; 
     } 
    }; 
    calculator = 
    new Calculator (
     document.getElementById('v1'), 
     document.getElementById('v2'), 
     document.getElementById('result') 
    ); 
    </script> 


    </body> 
</html> 

あなたは三元および乗算関数でstringの代わりStringを使用して||の代わりを使用して、エラーの数を作りました。上記のコードは今すぐに動作するはずです