多个if语句,然后是else Javascript
我正在尝试用javascript为反三角函数(反正弦、反正余弦、反正切)创建一个计算器,这样每个输入都有复选框,所以window.alert不会返回NULL(用户友好)。 表格:多个if语句,然后是else Javascript,javascript,html,forms,if-statement,trigonometry,Javascript,Html,Forms,If Statement,Trigonometry,我正在尝试用javascript为反三角函数(反正弦、反正余弦、反正切)创建一个计算器,这样每个输入都有复选框,所以window.alert不会返回NULL(用户友好)。 表格: <form name="inverse"> <legend>Legend is here.</legend> <input type="checkbox" name="inverse-cb1" value="sine"></input
<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>
}
问题是:多个if语句不起作用,因此函数永远不会返回。如何检查输入的条件并以正确的方式做出响应?我无法告诉您如何使其“工作”,因为您想要的结果非常不清楚,但当我从头到脚浏览时,代码中的一些问题突然向我袭来。有些仍将运行,但会给出您不期望的结果,但至少有一个问题会导致错误并停止函数运行。因此: 大多数注释要么是多余的,可以删除,要么是多余的,如果变量名更具描述性,可以删除 声明
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'){
这将永远不会为真,因为您正在将布尔值等于true
或false
的.checked
属性与字符串'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标识符中不能有“-”。因此,尽管“inverse-cb1”是一个有效的属性名称,但您必须使用数组样式括号[]
语法来访问它:
document.inverse["inverse-cb1"].checked
或者您可以从html和JS中删除“-”,问题是?我太累了,看不懂你们的心思……在上面加了一个问题@bottomYes,这是一些代码。我喜欢你的风格。很好地利用负空间,重复和对齐“重置”一词在美学上是令人愉悦的。我肯定会把这个挂在冰箱上,这还不是问题。“它不起作用,我怎样才能使它起作用”是非问题之王。谢谢!我照你说的做了,意识到我又犯了一个错误,但仍然不起作用。编辑的代码在主要问题的上方。请参阅我的编辑。可能还有其他问题,但我刚才添加的问题肯定会停止工作。它现在可以工作,但当我在一个字段上输入时,它会显示不适用于输入内容的值(我将尝试附加图片)。我应该在if语句2-8中使用else if(/*条件*/)
而不是if(/*条件*/)
?再次感谢!无法附加pic(@nnnnnn)如果您的代码在每个if
中都有返回值,则没有必要使用else if
而不是if
。
document.inverse["inverse-cb1"].checked