• ベストアンサー

ラジオボタンとドロップダウンの連動について

ド素人の初心者ですが、必要に迫られて困っております。過去ログを探してみたのですが、見当たりませんでした。既出でしたら申し訳ありませんが、よろしくお願い致します。 --------- 2つの項目からラジオボタンで選択後、 ○リンゴ ○バナナ ドロップダウンでそれぞれ  リンゴの場合→1個・2個  バナナの場合→1本・2本 と表示・選択するようにできますでしょうか。 またさらに、その下にドロップダウンを作成し、 (項目内容:現金・カード) リンゴ・1個・現金 の場合は100円と表示 リンゴ・1個・カードの場合は105円と表示 リンゴ・2個・現金 の場合は200円と表示 リンゴ・2個・カードの場合は205円と表示 バナナ・1本・現金 の場合は20円と表示 バナナ・1本・カードの場合は25円と表示 ... といった感じにすることはできますでしょうか。 回りくどい感じで大変申し訳ございません。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

やり方は色々あると思いますが、とりあえず動くサンプルを作ってみました。 IEとFireFoxで動作確認しました。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=SHIFT_JIS"> <title>ラジオボタンでセレクトリストの表示を変更する</title> <script type="text/javascript"> <!-- var Price = new Array(2); Price["apple"]=100;//それぞれの単価 Price["banana"]=20; var Count = new Array(2); Count["apple"]="個";//それぞれの数え方 Count["banana"]="本"; var Kind="apple"; //初期値はりんご var Bias=0; //初期値は現金 function updateKind(f){//種類が変更されたときの処理 Kind=(f.kind[0].checked)? f.kind[0].value : f.kind[1].value ; var selectForm = f.Number; for(var i=0;i<selectForm.options.length;i++){ selectForm.options[i].text=(selectForm.options[i].text).charAt(0) + Count[Kind]; } update(f); } function updateNumber(f){//数字が変更されたときの処理(特別することはない) update(f); } function updatePay(f){//支払い方法が変更されたときの処理 Bias=(f.Pay.value=="cash")? 0 : 5; //cardの時+5 update(f); } function update(f){//現在の設定で計算をする f.price.value = Price[Kind] * eval(f.Number.value) + Bias; } // --> </script> </head> <body onload="update(document.FORM1)"> <form name="FORM1"> <label><input type="radio" name="kind" value="apple" checked onclick="updateKind(this.form)">リンゴ</label> <label><input type="radio" name="kind" value="banana" onclick="updateKind(this.form)">バナナ</label> <select name="Number" onclick="updateNumber(this.form)"> <OPTION VALUE="1">1個 <OPTION VALUE="2">2個 <OPTION VALUE="3">3個 <OPTION VALUE="4">4個 <OPTION VALUE="5">5個 </select> <br> <select name="Pay" onclick="updatePay(this.form)"> <OPTION VALUE="cash">現金 <OPTION VALUE="card">カード </select> <input type="text" name="price" size="10" value="100" readonly>円 </form> </body> </html>

falc
質問者

お礼

ありがとうございます!こんなにすばらしい回答をいただけるなんて、思ってもみませんでした。 ぜひともすぐに応用させていただきます。 本当に本当にありがとうございました。 またよろしくお願い致します(*^^*)

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>onclickで取れないのでonchangeを利用する手もあります ryk1234さんの言われてる通りですね。ご指摘ありがとうございます。 自分でも指摘を・ >selectForm.options[i].text=(selectForm.options[i].text).charAt(0) + Count[Kind]; は、個数が1桁であることを想定しています。selectのoptionの数があらかじめ判っているから決め打ちでもいいのでしょうが、通常2桁以上の場合も考慮するべきです。 上記の部分を var len; len = selectForm.options[i].text.length; selectForm.options[i].text=(selectForm.options[i].text).substr(0,len-1) + Count[Kind]; に置き換えて下さい。

すると、全ての回答が全文表示されます。
  • ryk1234
  • ベストアンサー率40% (46/113)
回答No.2

BLUEPIXYさんご提示のサンプルで動作すると思いますが1点だけ… キーボード操作でリストボックスの値を変更した場合はonclickで取れないのでonchangeを利用する手もあります 横槍失礼致しました。

すると、全ての回答が全文表示されます。

関連するQ&A