JavaScriptのラジオボタンについてご質問させていただきます。
ラジオボタンに選択したメニューの合計カロリーを表示するというシステムを作っているのですが、私は初心者なため、行き詰まってしまいました。。
簡単なシステムで、ハンバーガー、サイドメニュー、ドリンクと3つの項目にそれぞれ2つ選択肢があって、最後に計算ボタンを押すと選んだメニューの合計カロリーが出るというものです。
私が作ったコードが以下になります。
<html>
<head>
<title>マックでカロリー</title>
<script language="javascript">
a =document.formA.hamburger.value;
b =document.formB.sidemenu.value;
c =document.formC.drink.value;
function calccalorie(){
calorie = "a + b + c";
return eval(calorie);
}
function writecalorie(){
document.write("あなたのマックでの摂取カロリーは" + calccalorie() + "kcalです!<br /><br />");
document.write("ちなみに、一日に必要なエネルギー量の目安は、20代男性で2650kcal、20代女性で2050kcalです。");
}
</script>
</head>
<body>
<fieldset>
<p>
<h2>ハンバーガー</h2><br />
<img src="hamburger.jpg" />
<img src="bigmac.jpg" /><br />
<form name="formA">
<input type="radio" name="hamburger" value="274" />
ハンバーガー
<input type="radio" name="hamburger" value="555" />
ビッグマック
</form>
</p>
</fieldset>
<fieldset>
<p>
<h2>サイドメニュー</h2>
<img src="frenchfries.jpg" />
<img src="shakashakachicken.jpg" /><br />
<form name="formB">
<input type="radio" name="sidemenu" value="454" />
マックフライポテト(M)
<input type="radio" name="sidemenu" value="187" />
シャカシャカチキン
</form>
</p>
</fieldset>
<fieldset>
<p>
<h2>ドリンク</h2>
<img src="cocacola.jpg" />
<img src="mcshake.jpg" /><br />
<form name="formC">
<input type="radio" name="drink" value="140" />
コカコーラ(M)
<input type="radio" name="drink" value="321" />
マックシェイクバニラ(M)
</form>
</p>
</fieldset>
<form>
<input type="button" name="btn1" value="何カロリー?"
onClick="writecalorie()" />
</form>
</body>
</html>
JavaScriptを勉強し始めて1週間ほどなので、すごく見当違いなことをしているかもわかりません^^;
何かアドバイス(参考ホームページでも)いただければ幸いです。
よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
ななめより、もうちょっとまっすぐみました。
ぜんかくくうはくは、すべてはんかくにしてね。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>マックでカロリー</title>
<style type="text/css"><!--
fieldset { margin:1em }
fieldset div { float: left; width:200px; }
fieldset div img { display: block; }
#c { color:red; font-size: x-large;}
#d { display:none; }
-->
</style>
<body>
<form id="hoge" action="#">
<fieldset>
<legend>ハンバーガー</legend>
<div>
<img src="hamburger.jpg" alt="ハンバーガー">
<input type="radio" name="hamburger" value="274" checked>
ハンバーガー
</div>
<div>
<img src="bigmac.jpg" alt="ビッグマック">
<input type="radio" name="hamburger" value="555">
ビッグマック
</div>
</fieldset>
<fieldset>
<legend>サイドメニュー</legend>
<div>
<img src="frenchfries.jpg" alt=" マックフライポテト(M)">
<input type="radio" name="sidemenu" value="454" checked>
マックフライポテト(M)
</div>
<div>
<img src="shakashakachicken.jpg" alt="シャカシャカチキン">
<input type="radio" name="sidemenu" value="187">
シャカシャカチキン
</div>
</fieldset>
<fieldset>
<legend>ドリンク</legend>
<div>
<img src="cocacola.jpg" alt="コカコーラ(M)">
<input type="radio" name="drink" value="140" checked>
コカコーラ(M)
</div>
<div>
<img src="mcshake.jpg" alt="マックシェイクバニラ(M)">
<input type="radio" name="drink" value="321">
マックシェイクバニラ(M)
</div>
</fieldset>
<p>
<input type="button" name="btn1" value="何カロリー?" onClick="writecalorie()">
</p>
<p id="d">
あなたのマックでの摂取カロリーは、<span id="c"></span>kcalです!<br>
ちなみに、一日に必要なエネルギー量の目安は、20代男性で2650kcal、20代女性で2050kcalです。
</p>
</form>
<script type="text/javascript"><!--
function writecalorie () {
var ns = document.getElementById ('hoge').elements;
var i = 0, n;
var total = 0;
while (n = ns[i++])
if ('radio' == n.type && n.checked)
total += Number( n.value );
document.getElementById ('c').firstChild.nodeValue = total + '';
with (document.getElementById('d')) {
style.display = 'block';
setTimeout (function (){ style.display = 'none'; }, 2000);
}
}
//-->
</script>
No.1
- 回答日時:
斜めに見ただけですが…
まずはスクリプトの前に、以下などでHTMLの構成をチェックしてみましょう。
http://htmllint.itc.keio.ac.jp/htmllint/htmllint …
いろいろあるはずですので、(全部の必要はありませんが)ある程度まではクリアできてから、スクリプトの修正にかかったほうがよろしいかと…
formを4箇所使っていますが、全体で1箇所のformで充分では?(あるいはformなしとか)
fieldsetも本来はform内で使用するべきものでは?
スクリプトの前に…
・ハンバーガーを2個食べたらどうするのだろうか?(そんなのは受け付けない?)
あるいはハンバーガーとビッグマックを食べたときはどうする?
・サイドメニューを食べなかったときには計算はどうなるのだろうか?
スクリプトに関して
・ご提示のソースではa,b,cの値をHTML読込み時に取得しようとしています。
(この段階では、要素もまだないし、値ももちろんない。)
ボタンクリック後に値を取得するつもりでは?
・document.formA.hamburgerでは要素を特定できない(2個以上ある)ので、
その値を取得はできません。
また、チェックされているボタンの値を取得するようにしなければなら
ないのでは?
・要素の指定は、少々面倒ですが
document.forms["formA"].elements["hamburger"]のような方法が確実です。
(あるいはdocument.getElementById()を利用するなど)
ただし、この場合は複数あるので(↑)と同じで配列で返されますから、
扱いに注意。
・writecalorie()内でdocument.writeを使用していますが、HTML表示後の
document.writeは全体を再記述する(あるいは無視されるなど)になります。
一旦DOMが構築された後では、新しい要素を生成するか既存の要素に表示
内容を変更するなどの方法を取らないとまずそう。
(何度かボタンを押した場合を想像してみてください)
・入力値や○○.valueは基本的に文字列となっている可能性があります。
そのまま計算すると文字列演算になる場合がありますのでご注意。
以上、とりあえず気付いた主な点です。
ご丁寧な解答、ありがとうございました。
現時点では自分にはこのプログラムはレベルが高いようです^^;
たくさんご指摘いただいたので、これから勉強していこうと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ラジオボタンにタブインデック...
-
javascriptでのアラート表示
-
(jQuery)ラジオボタン選択値を...
-
ラジオボタンを使って、検索ペ...
-
JavaScriptで小数点も含めた複...
-
データベースの値を判断してラ...
-
アンダーバーのname値は取得で...
-
ラジオボタンのチェックが外れ...
-
ラジオボタンのValueを受け取り...
-
サイト内にGoogleサイトを表示...
-
ポップアップウインドウで選択...
-
radio選択をクッキーに保存させ...
-
ラジオボタンでチェックした項...
-
ラジオボタン未チェックの場合...
-
jQuery 変数の使い方について
-
ラジオボタンのリセット方法
-
return trueとreturn falseの用...
-
プルダウン 項目が多いので先頭...
-
submitボタン押下時にPOSTされ...
-
onchangeイベントを強制的に発...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ラジオボタンのチェックが外れ...
-
javascript作成してます。ラジ...
-
ラジオボタンにタブインデック...
-
Jvasvriptのlengthで個数が取得...
-
ホームページ作成について。
-
データベースの値を判断してラ...
-
フォームPOST後「戻る」時のチ...
-
ラジオボタンでdisabledとchecked
-
Form内のselectを連動させるに...
-
チェックされたラジオボタンに...
-
アンダーバーのname値は取得で...
-
ラジオボタンのリセット方法
-
jQueryで複数のラジオボタンを処理
-
ラジオボタンの分岐方法に関して
-
javascriptによる動的なリンク...
-
radio選択をクッキーに保存させ...
-
jQuery 変数の使い方について
-
ラジオボタンでチェックした項...
-
チェックボックスとテキストボ...
-
JavaScriptでラジオボタンのチ...
おすすめ情報