我正在尝试在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语句不起作用,因此函数永远不会返回。如何检查输入条件并以正确的方式响应?
答案 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
属性(布局等于true
或false
与字符串 {{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中删除“ - ”。