2012-03-23 75 views
0

我一直坚持这一点,并不真正知道如何去解决它自己。我已经尝试过使用萤火虫并将其部分工作,但对于这么小的脚本来说,这太令人沮丧和耗时了。也许我使用的开关语句错误...在JavaScript中使用一个对象制作一个简单的计算器

本质上,我正在制作一个非常简单的计算器,第一次使用对象... 任何一点都会有所帮助 - 任何推动正确的方向: )

非常感谢您的阅读!

HTML文件是这样的:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 

    <title>Homework 8</title> 
     <link href="css/main.css" rel="stylesheet" type="text/css"/> 
</head> 

<body> 
    <div id="calc"> 
     <p><label for="num1">First Number:<input type="text" id="num1" class="txt" /></label></p> 
     <p><label for="num2">Second Number: <input type="text" id="num2" class="txt"/></label></p> 
     <p><label for ="add"><input type="radio" name="operation" id="add" value="add"/>Add</label> 
     <label for ="sub"><input type="radio" name="operation" id="sub" value="sub"/>Subtract</label> 
     <label for ="mult"><input type="radio" name="operation" id="mult" value="mult"/>Multiply</label> 
     <label for ="div"><input type="radio" name="operation" id="div" value="div"/>Divide</label></p> 
     <p><input type="button" id="calculate" value="Do Calculation"/></p> 
    </div> 
    <div id="result"></div> 
<script type="text/javascript" src="js/hw8.js"></script> 
<script type="text/javascript">obj.init();</script> 
</body> 
</html> 

JavaScript文件是这短短的脚本:

var obj = { 

add : document.getElementById("add"), 
sub : document.getElementById("sub"), 
mult : document.getElementById("mult"), 
div : document.getElementById("div"), 
num1 : document.getElementById("num1"), 
num2 : document.getElementById("num2"), 
result : document.getElementById("result"), 
calculate : document.getElementById("calculate"), 

    init : function(){ 

     obj.calculate.onclick = obj.resultArea; 

    }, 

    resultArea : function(){ 

     var num1Value = parseFloat(num1.value); 
     var num2Value = parseFloat(num2.value); 

     if (!isNaN(obj.num1Value) = true || !isNaN(obj.num2Value) = true){ 
      alert("Please enter only numbers in the First Number and Second Number fields!"); 
      return; 
     } 

     switch(true){ 
      case obj.add.checked : var ans = (num1Value + num2Value); break; 
      case obj.sub.checked : var ans = (num1Value - num2Value); break; 
      case obj.mult.checked : var ans = (num1Value * num2Value); break; 
      case obj.div.checked && num2Value != 0 : var ans = (num1Value/num2Value); break; 
      case obj.div.checked && num2Value = 0 : alert("cannot divide by zero"); break; 
     } 


     var p = document.createElement("p"); 
     p.appendChild(document.createTextNode("The answer is" + ans)); 
     obj.result.appendChild(p); 
    }, 

} 
+0

如果您将代码放在jsFiddle上或将我们指向工作链接,这将会很有帮助。 – 2012-03-23 21:29:36

+0

托管:http://jsfiddle.net/FyRrc/ – mellamokb 2012-03-23 21:30:05

+0

由于HTML页面的标题是“作业8”,这是一个作业问题吗?如果是这样,请将其标记为。 – mellamokb 2012-03-23 21:30:44

回答

2
if (!isNaN(obj.num1Value) = true || !isNaN(obj.num2Value) = true) 

除了误差由于混淆赋值运算符(=)和相等比较运算符(==)运算符这 是过于复杂的。

如果不是obj.num1Value不是一个数是真的而不是obj.num2alue不是一个数是真的吗?

  • 说什么?

考虑这一提法:

if (isNaN(obj.num1Value) || isNaN(obj.num2Value)) 

啊,如果任一obj.num1Value或obj.num2Value不是数千万......

你也可能要申报ans和“

resultArea : function(){ 
    var ans; 
    var p; 

    // ... 

    switch(true){ 
     // Note that we removed var keyword! 
     case obj.add.checked : ans = (num1Value + num2Value); break; 
      // .. 

此外,如果你在交换机统计使用换行符每种情况:在resultArea函数的顶部对'变一次EMENT它变得更容易跟踪 控制流:

switch(true){ 
     case obj.add.checked : 
      ans = (num1Value + num2Value); 
      break; 
     case obj.sub.checked : 
      ans = (num1Value - num2Value); 
      break; 
     case obj.mult.checked : 
      ans = (num1Value * num2Value); 
      break; 
     case obj.div.checked && num2Value !== 0 : 
      ans = (num1Value/num2Value); 
      break; 
     case obj.div.checked && num2Value == 0 : 
      alert("cannot divide by zero"); 
      break; 
    } 

你是不是你没有覆盖的情况下,你不知道答案:

if (typeof ans !== 'string') { 
    p.appendChild(document.createTextNode("The answer is forever blowing in the wind")); 
} 
+0

编辑:错过var错误提到@ pimvdb – max 2012-03-23 22:33:33

+0

谢谢! 几个星期前我真是太糟糕了...... 想知道10年后我会怎么想这个第一个问题哈哈! – AlecPerkey 2012-04-20 02:39:29

0

我不能得到的jsfiddle工作,但您的两个问题你的比较。

isNaN(obj.num1Value) = true 

不是法律声明。您需要将其修改为:

isNaN(obj.num1Value) == true 

这会做一个比较。因此,改变行是这样:

if (!isNaN(obj.num1Value) == true || !isNaN(obj.num2Value) == true){ 
..... 

和:

case obj.div.checked && num2Value == 0 : alert("cannot divide by zero"); break; 

在这两种情况下,唯一的变化是从=改为==

0

你混淆分配运算符(=)和相等比较运算符(==)。

运算符=用于为变量赋值。

如果你想比较true一个值,你可以使用:

isNaN(obj.num1Value) == true 

注意去除!以及因为isNaN回报true为无效号码。

其次,你有var num1Value,但你正在访问它,就好像对象有一个叫做这样的属性(obj.num1Value)一样。你必须使用但不是两者(你将它存储在一个不同的地方,而不是你从中获取它的地方)。

+0

非常感谢您的帮助。这一切都现在完美...奇怪的是谷歌浏览器似乎并不在乎,如果我使用引用对象属性作为变量。这一直扔我=/ – AlecPerkey 2012-03-23 22:16:57

0

function c(val) 
 
{ 
 
\t document.getElementById("d").value=val; 
 
} 
 
function v(val) 
 
{ 
 
\t document.getElementById("d").value+=val; 
 
} 
 
function e() 
 
{ 
 
\t try 
 
\t { 
 
\t c(eval(document.getElementById("d").value)) 
 
\t } 
 
\t catch(e) 
 
\t { 
 
\t c('Error') 
 
\t } 
 
}
h2 
 
{ 
 
text-align:center; 
 
text-decoration:underline; 
 
} 
 
.box 
 
{ 
 
background-color:#3d4543; 
 
height:300px; 
 
width:250px; 
 
border-radius:10px; 
 
position:relative; 
 
top:80px; 
 
left:40%; 
 
} 
 
.display 
 
{ 
 
background-color:#222; 
 
width:220px; 
 
position:relative; 
 
left:15px; 
 
top:20px; 
 
height:40px; 
 
} 
 
.display input 
 
{ 
 
position:relative; 
 
left:2px; 
 
top:2px; 
 
height:35px; 
 
color:black; 
 
background-color:#bccd95; 
 
font-size:21px; 
 
text-align:right; 
 
} 
 
.keys 
 
{ 
 
position:relative; 
 
top:15px; 
 
} 
 
.button 
 
{ 
 
width:40px; 
 
height:30px; 
 
border:none; 
 
border-radius:8px; 
 
margin-left:17px; 
 
cursor:pointer; 
 
border-top:2px solid transparent; 
 
} 
 
.button.gray 
 
{ 
 
color:white; 
 
background-color:#6f6f6f; 
 
border-bottom:black 2px solid; 
 
border-top:2px #6f6f6f solid; 
 
} 
 
.button.pink 
 
{ 
 
color:black; 
 
background-color:#ff4561; 
 
border-bottom:black 2px solid; 
 
} 
 
.button.black 
 
{ 
 
color:white; 
 
background-color:303030; 
 
border-bottom:black 2px solid; 
 
border-top:2px 303030 solid; 
 
} 
 
.button.orange 
 
{ 
 
color:black; 
 
background-color:FF9933; 
 
border-bottom:black 2px solid; 
 
border-top:2px FF9933 solid; 
 
} 
 
.gray:active 
 
{ 
 
border-top:black 2px solid; 
 
border-bottom:2px #6f6f6f solid; 
 
} 
 
.pink:active 
 
{ 
 
border-top:black 2px solid; 
 
border-bottom:#ff4561 2px solid; 
 
} 
 
.black:active 
 
{ 
 
border-top:black 2px solid; 
 
border-bottom:#303030 2px solid; 
 
} 
 
.orange:active 
 
{ 
 
border-top:black 2px solid; 
 
border-bottom:FF9933 2px solid; 
 
} 
 
p 
 
{ 
 
line-height:10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script> 
 
<h2>Calculator Created by Anoop Kumar Sharma</h2> 
 
<div class="box"> 
 
\t <div class="display"><input type="text" readonly size="18" id="d"></div> 
 
\t <div class="keys"> 
 
\t \t <p><input type="button" class="button gray" value="mrc" onclick='c("Created....................")'><input type="button" class="button gray" value="m-" onclick='c("...............by............")'><input type="button" class="button gray" value="m+" onclick='c(".....................Anoop")'><input type="button" class="button pink" value="/" onclick='v("/")'></p> 
 
\t \t <p><input type="button" class="button black" value="7" onclick='v("7")'><input type="button" class="button black" value="8" onclick='v("8")'><input type="button" class="button black" value="9" onclick='v("9")'><input type="button" class="button pink" value="*" onclick='v("*")'></p> 
 
\t \t <p><input type="button" class="button black" value="4" onclick='v("4")'><input type="button" class="button black" value="5" onclick='v("5")'><input type="button" class="button black" value="6" onclick='v("6")'><input type="button" class="button pink" value="-" onclick='v("-")'></p> 
 
\t \t <p><input type="button" class="button black" value="1" onclick='v("1")'><input type="button" class="button black" value="2" onclick='v("2")'><input type="button" class="button black" value="3" onclick='v("3")'><input type="button" class="button pink" value="+" onclick='v("+")'></p> 
 
\t \t <p><input type="button" class="button black" value="0" onclick='v("0")'><input type="button" class="button black" value="." onclick='v(".")'><input type="button" class="button black" value="C" onclick='c("")'><input type="button" class="button orange" value="=" onclick='e()'></p> 
 
\t </div> 
 
</div> 
 

 
</body>

+1

你应该解释你的代码以及它为什么有帮助。 – Reeno 2015-10-09 07:48:54

相关问题