2012-02-02 13 views
-8

逆三角関数(arcsine、arccosine、arctangent)用のJavaScriptで電卓を作成しようとしていますので、各入力に対してcheckboxがあるので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; 
} 

}

質問:複数の文がそれほど作業していない場合関数が戻ることはありません。どのように入力の条件をチェックし、適切な方法で応答することができますか?

+2

質問は?私はあなたの心を読むにはあまりにも疲れています.... – hvgotcodes

+0

何が質問ですか? –

+0

に質問が追加されました – ZuluDeltaNiner

答えて

2

あなたの望む結果がかなり不明なので、私はそれを "仕事"にするために何をするべきかを教えてくれませんが、私は上から下に向かってスキミングしながらコードのいくつかの問題が飛び出しました。いくつかは実行されますが、期待していない結果が得られますが、少なくとも1つの問題が原因でエラーが発生し、機能が停止します。したがって:

ほとんどのコメントは重複しており、削除することもできますし、変数名をわかりやすくすることで冗長と削除することもできます。すでにdocument.inverse.sin.valueに等しく、== true一部が重複している変数sinを宣言したので

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

文は単純に作ることができます。ただ、

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

あなたの(a)はvarを使用すると、あなたは(私はJSはちょうどこれを無視すると思う)の変数を再宣言しようとしているので、あなただけべきであることを意味するのでvar sin = null;のような文が間違っていると無意味ともに「リセット」のすべてを言いますsin = null;と答えてください。いずれの場合も、(b)trigI()関数内の変数はローカルなので、関数が返ってくるとすべて消えてしまいます。画面上のフィールドをクリアする場合は、document.inverse.sin.value = "";と言う必要がありますが、すべてをフィールドにクリアすることでユーザを悩ませたくないのは、の1つがで無効だったからです。彼らにを教えてください。どれがフィールドに問題があったのか、そのフィールドにフォーカスを合わせて、それを修正するようにしてください。

このようなあなたのif文のテスト何かのほとんど:

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

あなたは'false'文字列でtrueまたはfalseにブール等しい.checkedプロパティを比較しているので、本当のことはありません。あなたが言う必要があります

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

sup.sup()とは何ですか? supは、-1に設定した変数です。 sup()は存在しない関数であり、いずれの場合でも番号のメソッドとして呼び出すことはできません。 これは最初に、に修正されました。

EDIT:あなたはJS識別子の命名のための規則に従わない性質のための「ドット」オブジェクトの表記法、およびJS識別子を使用することはできません

document.inverse.inverse-cb1.checked 

ことができます。私は別の大きな問題に気づきましたそれらには " - "があります。だから、「逆CB1」が、あなたがそれにアクセスするために、アレイスタイルのブラケットに[]構文を使用する必要があり、有効なプロパティ名である:

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

それとも、単に削除することもできます「 - 」htmlとあなたのJSの両方から。

+0

ありがとうnnnnnn!私はOuが言ったことをして、私が作った別の間違いを実感しましたが、それでも動作しません。編集されたコードは主な質問の上にあります。 – ZuluDeltaNiner

+0

私の編集を参照してください。まだ別の問題があるかもしれませんが、私が追加したものは間違いなく動作を停止しています。 – nnnnnn

+0

これは動作しますが、1つのフィールドに入力すると、入力されたものには適用されない値が表示されます(写真を添付し​​ようとします)。もしif文2-8の 'if(/ * condition * /)'ではなく 'else if(/ * condition * /)'を使うべきですか?再度、感謝します! – ZuluDeltaNiner

関連する問題