イヌでもわかるJavaScript講座
|
Step.70 - 危険度チェックをしてみましょう
|
ときどき、雑誌などで見かける、YESの数で診断する「××度チェック」をやってみましょう |
Step テーマ ● チェックボックス操作 |
実行例あなたの危険度チェック! |
リスト
|
サンプルだけの HTMLは こちらへ |
使い方● チェックボックスの診断文を作っていきます。
● if 文で チェック数の範囲での結果を作っていきます
|
説明「××度チェック」をやろうと思えば、チェックボックスとボタンが想像できます。それでいきましょう。(^^; まず、とにかくフォームで、チェックボックスの診断文をだらだら作っていきます。
それを、ループ文をつかって、何個チェックされたか数えれば、ほぼ完成です。 チェックボックスの数分ループすればよいので、 for (i=0; i<5; i++){・・・} i を0からはじめて、i が5以内であれば{ }内をループさせる、1回のループにつき、i を1加算する。 i が、0から4までのループ、つまり、5回ループさせます。 ちなみに、"myForm"の<FORM>タグ内に何個<INPUT>タグがあるかを調べるためには、 document.myForm.length で、数がわかります。 for (i=0; i<document.myForm.length-1; i++) なぜ、1 を引いているかというと、[診断]ボタンも、<INPUT>タグですので、1カウントされています。 なので、1 を引いてチェックボックスの数にしています。 <input type="checkbox" name="myTobacco">たばこは1日20本以上吸う<br> このチェックボックスがチェックされているか調べるためには、 document.myForm.myTobacco.checked これで、"myForm"フォームの"myTobacco"のチェックボックスの状態を知ることができます。 チェックされていれば true、チェックされていなければ false のブール値がセットされています。 document.myForm.elements[i].checked こんな感じで、elements[] を使うと、"myForm"フォームの i 番目のチェックボックスの状態を知ることができます。 なぜ、5回ループするのに、i を 0 から 4 までループさせるのかというのも、これで納得でしょうか? テーブル番号は ゼロ から始まるのです。 あと、[診断]ボタンの位置にも気を付けてください。このサンプルは一番下にあるので、チェックボックスのテーブル番号は 0〜4 となります。 あとの、if 文の説明は、もうよろしいでしょうか (^^; if ( myCnt == 0 ) myMess="正常"; else if ( myCnt <= 2 ) myMess="ちょヤバ"; else if ( myCnt <= 4 ) myMess="危険気味"; else myMess="完璧に危険"; もしも、myCnt が0だったら、"正常"を myMess にセットして、それ以降の else 文 は処理しません。 よって、小さい順に比較していけば、下のようにする必要はありません。 if ( myCnt == 0 ) myMess="正常"; else if ( myCnt>=1 && myCnt<=2 ) myMess="ちょヤバ"; else if ( myCnt>=3 && myCnt<=4 ) myMess="危険気味"; else myMess="完璧に危険"; 以上、if 文のおさらいでした。(^^; ※ Step.68 参照 |
QA.1[Q] 危険度チェックの結果表示をダイアログボックスではなく、普通のHTMLページで表示したいのですが [A] 結果別に、location.href でリンクさせます。 if (myCnt == 0) myURL = "ans1.htm"; else if (myCnt <= 2) myURL = "ans2.htm"; else if (myCnt <= 4) myURL = "ans3.htm"; else myURL = "ans4.htm"; location.href = myURL; |
QA.2[Q] チェックした数ではなく、チェックした項目で判定したいのですが [A] 以下のルールで判定してみます。 Q1またはQ2にチェックしていたら、「ストレスがたまっています」
Q3にチェックしていたら、「本来の性格が見え隠れしています」
Q4またはQ5にチェックしていたら、「心が病んでいます」
なにもチェックしていなければ、「あなたは健康体です」
を判定結果にします。複数パターンのチェックは該当結果を連結して表示します。
結果は alertではなく、ページ内に表示します(innerHTML)。
|
|