2012-02-02 50 views
-8

我想在反向三角函数(反正弦,arccosine,arctangent)的JavaScript中创建一个计算器,我有它,所以有每个输入的复选框,以便window.alert不返回NULL(用户友好)。 形式为:多if语句,然后其他Javascript

<form name="inverse"> 
     <legend>Legend is here.</legend> 
     <input type="checkbox" name="inverse-cb1" value="sine"></input><label> sin<sup>-1</sup> (</label><input type="text" size=5 name="sin"><label>)</label><br> 
     <input type="checkbox" name="inverse-cb2" value="cosine"></input><label> cos<sup>-1</sup> (</label><input type="text" size=5 name="cos"><label>)</label><br> 
     <input type="checkbox" name="inverse-cb3" value="tangent"></input><label> tan<sup>-1</sup> (</label><input type="text" size=5 name="tan"><label>)</label><br> 
     <br><input type="button" onclick="trigI()" value="Calculate"> 
    </form> 

脚本:

function trigI(){ 
var sin = document.inverse.sin.value;  //sine 
var cos = document.inverse.cos.value;  //cosine 
var tan = document.inverse.tan.value;  //tangent 

var sin1 = Math.asin(sin);  //arcsine 
var cos1 = Math.acos(cos);  //arccosine 
var tan1 = Math.atan(tan);  //arctangent 

var sin1d = sin1 * (180/Math.PI); //convert radians to degrees (sine) 
var cos1d = cos1 * (180/Math.PI); //convert radians to degrees (cosine) 
var tan1d = tan1 * (180/Math.PI); //convert radians to degrees (tangent) 

if (isNaN(sin) || isNaN(cos) || isNaN(tan)){ 
    window.alert("Please input a number."); 

    return; 
} 

if (!document.inverse.inverse-cb1.checked){ //no sine input 
    window.alert("When cos(\u2220) = " + cos + " and tan(\u2220) = " + tan + " :" + "\n\n" + "cos\u2212\u00B2(A) = " + cos1d + "\n" + "tan\u2212\u00B2(A) = " + tan1d + "\u00B0"); 

    return; 
} 

if (!document.inverse.inverse-cb2.checked){ //no cosine input 
    window.alert("When sin(\u2220) = " + sin + " and tan(\u2220) = " + tan + " :" + "\n\n" + "sin\u2212\u00B2(A) = " + sin1d + "\u00B0" + "\n" + "tan\u2212\u00B2(A) = " + tan1d + "\u00B0"); 

    return; 
} 

if (!document.inverse.inverse-cb3.checked){ //no tangent input 
    window.alert("When sin(\u2220) = " + sin + " and cos(\u2220) = " + cos + " :" + "\n\n" + "sin\u2212\u00B2(A) = " + sin1d + "\u00B0" + "\n" + "cos\u2212\u00B2(A) = " + cos1d + "\u00B0"); 

    return; 
} 

if (!document.inverse.inverse-cb1.checked && !document.inverse.inverse-cb2.checked){  //no sine and cosine input 
    window.alert("When tan(\u2220) = " + tan + " :" + "\n\n" + "tan\u2212\u00B2(A) = " + tan1d + "\u00B0"); 

    return; 
} 

if (!document.inverse.inverse-cb2.checked && !document.inverse.inverse-cb3.checked){  //no cosine and tangent input 
    window.alert("When sin(\u2220) = " + sin + " :" + "\n\n" + "sin\u2212\u00B2(A) = " + sin1d + "\u00B0"); 

    return; 
} 

if (!document.inverse.inverse-cb1.checked && !document.inverse.inverse-cb3.checked){  //no sine and tangent input 
    window.alert("When cos(\u2220) = " + cos + " :" + "\n\n" + "cos\u2212\u00B2(A) = " + cos1d + "\u00B0"); 

    return; 
} 

if (!document.inverse.inverse-cb1.checked && !document.inverse.inverse-cb2.checked && !document.inverse.inverse-cb3.checked){  //no input or checked boxes 
    window.alert("Please input a number or check the correct boxes."); 

    return; 
} 

else { 
    window.alert("When sin(\u2220) = " + sin + ", cos(\u2220) = " + cos + ", and tan(\u2220) = " + tan + " :" + "\n\n" + "sin\u2212\u00B2(A) = " + sin1d + "\u00B0" + "\n" + "cos\u2212\u00B2(A) = " + cos1d + "\u00B0" + "\n" + "tan\u2212\u00B2(A) = " + tan1d + "\u00B0"); 
    return; 
} 

}

的问题:if语句不工作,因此函数永远不会返回的多。如何才能检查输入条件并以正确的方式进行响应?

+2

问题是?我太累了,无法读懂你的想法...... – hvgotcodes 2012-02-02 01:51:42

+0

有什么问题吗? – 2012-02-02 01:52:00

+0

在它上面添加了问题@ bottom – ZuluDeltaNiner 2012-02-02 02:07:16

回答

2

我不能告诉你该怎么做才能使它“工作”,因为你期望的结果很不明确,但是当我从上到下浏览它时,代码中的一些问题跳到了我的头上。有些仍然会运行,但会给出您不期待的结果,但至少有一个问题会导致错误并停止运行。所以:

您的大多数意见都是冗余的,可以删除,或者如果您的变量名称更具描述性,可以将其删除或删除。

声明

if (isNaN(document.inverse.sin.value) == true || ...) 

可以作出简单,因为你已经声明的变量sin等于document.inverse.sin.value== true部分是多余的。只是说

if (isNan(sin) || isNan(cos) || isNan(tan)) { 

您所有的“复位”像var sin = null;语句都是错误的和毫无意义的,因为(a)使用var意味着你正试图重新声明变量(我认为JS会忽略这一点),所以你只要例如sin = null;,但无论如何(b)它们是本地变量位于您的trigI()函数中,因此它们在函数返回时即将消失。如果您尝试清除屏幕上的字段,您需要说document.inverse.sin.value = "";,但您不希望通过清除全部这些字段而惹恼用户,因为其中一个的字段无效。告诉他们哪个字段有问题,将焦点设置到该字段,并让他们自己纠正它。

你的大部分if声明测试是这样的:

if (document.inverse-cb1.checked == 'false'){ 

,因为你是比较.checked属性,它是一个布尔值等于truefalse'false'这将永远是正确的。您需要说

if (document.inverse-cb1.checked == false){ // note: no quotes 
// OR, even better 
if (!document.inverse-cb1.checked){ 

什么是sup.sup()应该做的? sup是您设置为-1的变量。 sup()是一个不存在的函数,在任何情况下,您都不应该尝试将其作为数字的方法调用。 首先解决这个问题,因为我认为这是停止函数返回。

编辑:我注意到另一个大问题:

document.inverse.inverse-cb1.checked 

不能使用“点”对象符号对于不遵循JS标识符命名规则属性和JS标识符可以他们中没有“ - ”。因此,尽管“反CB1”是一个有效的属性名称必须使用阵列式支架[]语法来访问它:

document.inverse["inverse-cb1"].checked 

或者你可以只取出“ - ”从HTML和您的JS都。

+0

谢谢nnnnnn!我做了你所说的并意识到我犯了另一个错误,但它仍然不起作用。编辑的代码在主要问题上面。 – ZuluDeltaNiner 2012-02-02 04:40:24

+0

看我的编辑。可能还有其他问题,但我刚刚添加的那个问题肯定是停止了它的工作。 – nnnnnn 2012-02-02 04:51:24

+0

它现在可以工作,但是当我在一个字段上输入时,它会显示不适用于输入内容的值(我将尝试添加图片)。我应该在if语句2-8中使用'else if(/ * condition * /)'而不是'if(/ * condition * /)'吗?再次感谢! – ZuluDeltaNiner 2012-02-02 05:25:01