2017-03-05 28 views
-1

开发人员工具/故障排除告诉我,计算器未在HTMLButtonElement.onclick中定义。除了我没有得到答案,一切都有效。有人看到我做错了吗?我遵循一个例子,一个例子的作品。但不是我的代码。我得到四个按钮和两个文本框,但是当我点击按钮时,没有答案,文本框中有数字。未捕获的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。上面的代码现在应该可以工作

相关问题