2012-02-02 95 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