多个if语句然后是Javascript

时间:2012-02-02 01:46:05

标签: javascript html forms if-statement trigonometry

我正在尝试在javascript中创建一个反三角函数(arcsine,arccosine,arctangent)的计算器,我有它所以每个输入都有复选框,所以window.alert不返回NULL(用户友好)。 表格:

<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语句不起作用,因此函数永远不会返回。如何检查输入条件并以正确的方式响应?

1 个答案:

答案 0 :(得分: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 = "";,但是您不希望通过清除所有字段来惹恼用户,因为 one < / em>他们无效。告诉他们哪个字段有问题,将焦点设置到该字段,并让他们自己更正。

您的大多数if语句测试的内容如下:

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

由于您将.checked属性(布局等于truefalse字符串 {{1}进行比较,因此永远不会成立}。你需要说

'false'

if (document.inverse-cb1.checked == false){ // note: no quotes // OR, even better if (!document.inverse-cb1.checked){ 应该做什么? sup.sup()是您已设置为sup的变量。 -1是一个不存在的函数,在任何情况下你都不应该尝试调用作为数字的方法。 先修复此问题,,因为我认为这就是停止返回函数的原因。

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

sup()

对于不遵循JS标识符命名规则的属性,不能使用“点”对象表示法,并且JS标识符中不能包含“ - ”。因此,虽然“inverse-cb1”是有效的属性名称,但您必须使用数组样式括号document.inverse.inverse-cb1.checked 语法来访问它:

[]

或者您可以从html和JS中删除“ - ”。