• 締切済み

ラジオとセレクトメニューが親子の送信フォーム

前回の質問でラジオとプルダウンが親子になってるモノが複数項目あるフォームを作ることができたのですが、 それぞれが、formでくくってあり、送信がうまくいきません。どうすればいいでしょうか?なにかいい方法がありましたら教えて下さい。 前回の質問 http://okwave.jp/qa/q6912949.html <m(__)m>どうか宜しくお願い致します。

  • HTML
  • 回答数4
  • ありがとう数1

みんなの回答

  • Chaire
  • ベストアンサー率60% (79/130)
回答No.4

<script type="text/javascript"> function handleRadioGroup (e) {  var t = e.target || e.srcElement, c = e.currentTarget || this;  var d, fgroup, f, rgroup, r, s;  var i, j;  switch (e.type) {  case 'focus':  case 'focusin':   d = t.ownerDocument;   if (t.nodeType === 1 && t.tagName === 'INPUT' && t.type === 'radio')    if ((f = t.form) && (s = t.name))     for (rgroup = f.elements[s], i = 0; r = rgroup[i++]; ) {      r.checked = (r === t);      if ((s = r.getAttribute('aria-controls')))       if ((s = d.getElementById(s)))        if (! (s.disabled = !r.checked)) s.focus();     }   return;  case 'mousedown' :   if (t.nodeType === 1) {    if (t.tagName === 'LABEL')     if (! (t = t.getElementsByTagName('INPUT')[0]))      return;    if (t.tagName === 'INPUT' && t.type === 'radio')     t.focus (), e.preventDefault();   }   return;  case 'load':   for (fgroup = c.document.forms, i = fgroup.length; i > 0; )    for (rgroup = fgroup[i -= 1].elements, j = rgroup.length; j > 0; ) {     r = rgroup[j -= 1];     if (r.nodeType === 1 && r.tagName === 'INPUT' && r.type === 'radio')      if (r.checked) r.focus();    }  } } try {  document.addEventListener('focus', handleRadioGroup, true);  document.addEventListener('mousedown', handleRadioGroup, true);  window.addEventListener('load', handleRadioGroup, false); } catch (err) {  document.attachEvent('onfocusin', handleRadioGroup);  document.attachEvent('mousedown', handleRadioGroup);  window.attachEvent('onload', handleRadioGroup); } </script> <form action="#">  <fieldset>   <legend>用紙の種類</legend>   <label>    <input type="radio" name="r1" value="1" tabindex="0" aria-controls="design1">    <select name="design[1]" id="design1">     <option value="A">デザインA</option>     <option value="B">デザインB</option>     <option value="C">デザインC</option>    </select>   </label>   <label><input type="radio" name="r1" value="2" tabindex="0" checked>選択しない</label>   <label><input type="radio" name="r1" value="3" tabindex="0" aria-controls="other1">その他</label>   <input type="text" name="other[1]" id="other1" value="">  </fieldset>  <fieldset>   <legend>色数</legend>   <label>    <input type="radio" name="r2" value="1" tabindex="0" aria-controls="design2">    <select name="design[2]" id="design2">     <option value="A">デザインA</option>     <option value="B">デザインB</option>     <option value="C">デザインC</option>    </select>   </label>   <label><input type="radio" name="r2" value="2" tabindex="0" checked>選択しない</label>   <label><input type="radio" name="r2" value="3" tabindex="0" aria-controls="other2">その他</label>   <input type="text" name="other[2]" id="other2" value="">  </fieldset>  <fieldset>   <legend>その他</legend>   <label>    <input type="radio" name="r3" value="1" tabindex="0" aria-controls="design3">    <select name="design[3]" id="design3">     <option value="A">デザインA</option>     <option value="B">デザインB</option>     <option value="C">デザインC</option>    </select>   </label>   <label><input type="radio" name="r3" value="2" tabindex="0" checked>選択しない</label>   <label><input type="radio" name="r3" value="3" tabindex="0" aria-controls="other3">その他</label>   <input type="text" name="other[3]" id="other3" value="">  </fieldset> </form>

souseki2010
質問者

補足

Chaireさん、お忙しい中、ご親切に回答有難うございます。 土日のうちにChaireさんに教えて頂いたコードで試してみますね! 必ず土日のうちに結果報告としてご連絡差し上げます。 当方、はじめてフォーム作成に取り掛かっているもので色々とご迷惑おかけしまして申し訳ない限りです。。皆様のアドバイス本当に感謝しております。。 明日あたりにまたご質問させて頂くことがありましたら宜しくお願い致します。 失礼します。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

ちなみに、条件が特定のclass(今回でいうとnodisbledクラス)の中にある input要素をdisabledしなければよければこんな感じ <style> table{border-collapse:collapse;} td{ border:solid 1px #000000;} td:first-child{background-Color:aqua;} </style> <script type="text/javascript"> try{ document.addEventListener ('click',function(e){clickfunc(e)},true); //NOT IE }catch(e){ document.attachEvent('onclick',function(e){clickfunc(e)}); //IE } function clickfunc(e){ var t = (e.srcElement || e.target); if(t.nodeName=="INPUT" && t.type=="radio"){ setDisabled(t); } } window.onload=function(){ setDisabled(null); } function setDisabled(t){ var e=(t==null)?document.getElementsByTagName("*"):t.parentNode.parentNode.getElementsByTagName("*"); for(var i=0;i<e.length;i++){ var n=e[i].nodeName; if((n=="INPUT" && e[i].type!="submit" && e[i].type!="radio") || n=="SELECT" || n=="TEXTAREA" || n=="BUTTON" ){ e[i].disabled = (t==null || t.parentNode!=e[i].parentNode ) && !e[i].parentNode.className.match(/(^|\s)nodisabled(\s|$)/); } } } </script> <form> <table> <tbody> <tr><td>用紙の種類</td> <td> <div> <div><input type="radio" name="r1" value="1"> <select name="design[1]"> <option value="A">デザインA</option> <option value="B">デザインB</option> <option value="C">デザインC</option> </select> </div> <div><input type="radio" name="r1" value="2" checked>選択しない</div> <div><input type="radio" name="r1" value="3">その他 <input type="text" name="other[1]" value=""></div> </div> </td></tr> <tr> <td>色数</td> <td> <div> <div><input type="radio" name="r2" value="1"> <select name="design[2]"> <option value="A">デザインA</option> <option value="B">デザインB</option> <option value="C">デザインC</option> </select></div> <div><input type="radio" name="r2" value="2" checked>選択しない</div> <div><input type="radio" name="r2" value="3">その他 <input type="text" name="other[2]" value=""> </div> </div> </td> </tr> <tr><td>その他</td> <td> <div> <div><input type="radio" name="r3" value="1"> <select name="design[3]"> <option value="A">デザインA</option> <option value="B">デザインB</option> <option value="C">デザインC</option> </select></div> <div><input type="radio" name="r3" value="2" checked>選択しない</div> <div><input type="radio" name="r3" value="3">その他 <input type="text" name="other[3]" value=""> </div> </div> </td> </tr> </tbody> </table> <div class="nodisabled"> <input type="text" name="hoge1" value=""> <input type="text" name="hoge2" value=""> <input type="text" name="hoge3" value=""> <input type="submit" value="go"> </div> </form>

souseki2010
質問者

補足

yambejpさん、お忙しい中、何度もご教授して頂き有難うございます。 yambejpさんのご回答を参考に、土日に挑戦してみます。 必ず結果のご連絡させて頂きます、本当に何度も質問しまして申し訳ない限りです。。 皆様プロのご意見、本当に感謝しております。 また素人ながらに質問させて頂くことが御座いましたらご教授のほど宜しくお願いいたします。 それでは今週土日にまたご連絡差し上げます。 本当に色々とありがとうございます。。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

何か書くたびに仕様を変更されると非常にやりにくい・・・ こういうものはある程度仕様を固めてから作りこんでいくものです。 で、今回の仕様ですが ラジオボタンで解放されるテキストボックスがあって、 そのほかに一般的なテキストボックスがあるのですか? そのテキストボックスは同じフォーム内にあるのですか? 同じフォーム内にあったらなにを基準に解放されているとか使用不可を 調整するのですか? とりあえずこれ以上仕様の追加はないですか? (あれこれやってるとつぎはぎだらけで最悪のコードになる可能性があるので)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

こうしてみるとよいでしょう。 <style> table{border-collapse:collapse;} td{ border:solid 1px #000000;} td:first-child{background-Color:aqua;} </style> <script> try{ document.addEventListener ('click',function(e){clickfunc(e)},true); //NOT IE }catch(e){ document.attachEvent('onclick',function(e){clickfunc(e)}); //IE } function clickfunc(e){ var t = (e.srcElement || e.target); if(t.nodeName=="INPUT" && t.type=="radio"){ setDisabled(t); } } window.onload=function(){ setDisabled(null); } function setDisabled(t){ var e=(t==null)?document.getElementsByTagName("*"):t.parentNode.parentNode.getElementsByTagName("*"); for(var i=0;i<e.length;i++){ var n=e[i].nodeName; if((n=="INPUT" && e[i].type!="submit" && e[i].type!="radio") || n=="SELECT" || n=="TEXTAREA" || n=="BUTTON" ){ e[i].disabled = (t==null || t.parentNode!=e[i].parentNode ); } } } </script> <form> <table> <tbody> <tr><td>用紙の種類</td> <td> <div> <div><input type="radio" name="r1" value="1"> <select name="design[1]"> <option value="A">デザインA</option> <option value="B">デザインB</option> <option value="C">デザインC</option> </select> </div> <div><input type="radio" name="r1" value="2" checked>選択しない</div> <div><input type="radio" name="r1" value="3">その他 <input type="text" name="other[1]" value=""></div> </div> </td></tr> <tr> <td>色数</td> <td> <div> <div><input type="radio" name="r2" value="1"> <select name="design[2]"> <option value="A">デザインA</option> <option value="B">デザインB</option> <option value="C">デザインC</option> </select></div> <div><input type="radio" name="r2" value="2" checked>選択しない</div> <div><input type="radio" name="r2" value="3">その他 <input type="text" name="other[2]" value=""> </div> </div> </td> </tr> <tr><td>その他</td> <td> <div> <div><input type="radio" name="r3" value="1"> <select name="design[3]"> <option value="A">デザインA</option> <option value="B">デザインB</option> <option value="C">デザインC</option> </select></div> <div><input type="radio" name="r3" value="2" checked>選択しない</div> <div><input type="radio" name="r3" value="3">その他 <input type="text" name="other[3]" value=""> </div> </div> </td> </tr> </tbody> </table> <input type="submit" value="go"> </form>

souseki2010
質問者

お礼

yambejp様 早々のご回答ありがとうございます。試してみた所ばっちり出来ました。ありがとうございます。 このフォームの中にただのテキストボックスを入れてみると、それも入力できないようになってしまうのですが、どうしたらいいでしょうか?? 度々申し訳ありません。お時間ありましたらよろしくお願いします。

関連するQ&A

  • selectでのフォーム送信

    下記の質問で別の解決手順を思いついたのですが技術力が不足しているのでどなたか助けてください。 フォームのselectが変更されたときに、そのフォームの内容をcgiファイルに送信するようなスクリプトがどこかにありませんか。具体的には、 <form name="form1" method="get" action="・・・.cgi"> <input type="text" name="text" size=20> <select name="sele" onChange()> <option・・・ <option・・・ </select> </form> といったフォームで、onChange()のなかでform1をsubmitしたのと同じ結果になるようにJavaScriptを書き込みたいのです。 どうかよろしくお願いします。

  • ラジオボタンでフォームの送信先を切り替える

    <script type="text/javascript"> <!-- function setDisabledTextbox(F,N1,N2,N3) { if(N1 == "OrderPayment0") { F[N2].disabled = true; F[N3].disabled = false; } else { F[N2].disabled = false; F[N3].disabled = true; } } //--> </script> //フォームの1の記述 <form method="post" action="送信先1"> //ラジオボタン1の記述 <input type="radio" name="payment1" value="値1" onclick="setDisabledTextbox(this.form,this.id,'tbox0','tbox1')" <?php if($payment_name == "値1") echo "checked"; ?> id="OrderPayment0" /> <label for="OrderPayment0">値1</label><br /> //ラジオボタン2の記述 <input type="radio" name="payment2" value="値2" onclick="setDisabledTextbox(this.form,this.id,'tbox0','tbox1')" <?php if($payment_name == "値2") echo "checked"; ?> id="OrderPayment1" /> <label for="OrderPayment1">値2</label><br /> 送信1の入力フォームの記述 <input type="submit" name="tbox0" value="送信1" disabled /> </form> //フォームの2の記述 <form method="post" action="送信先2"> 送信2の入力フォームの記述 <input type="submit" name="tbox1" value="送信2" disabled /> </form> 上記の記述で、最初、送信ボタン1及び送信ボタン2をdisabled状態にしておいて、ラジオボタンの1が押されたら送信ボタンの1を活性化、ラジオボタンの2を押したら送信ボタンの2を活性化するというように切り替えたいのですが、今のところ送信ボタンの1の切り替えはうまくいっているのですが、送信ボタンの2の方がdisabledされたままにまります。フォームの有効範囲の問題かな?と思って、ラジオボタンの2の記述をフォームの2の記述の方に移してみたりしたのですが、結果は同じようです。 両方とも切り替えるようにするには、どのように記述すればよいのでしょうか? 御教示願えればと思います。

  • ラジオボタンとセレクトメニューの連動が複数項目

    前回の質問でフォームでラジオボタンとセレクトメニューの連動をおこなうことができましたが、これを複数項目で選択可能にしたいのですが、コードを教えて頂けませんでしょうか? このような感じです。 用紙の種類 ◎デザインA  ◎選択しない  ◎その他{        }  デザインB  デザインC 色数 ◎デザインA  ◎選択しない  ◎その他{        }  デザインB  デザインC <m(__)m>どうか宜しくお願い致します。

    • ベストアンサー
    • HTML
  • 選択肢によって送信先が変えられるメールフォームCGI

    こんにちは。質問させて頂きます。 メールフォームのCGIで、複数のメルアドに送信出来るものはよくありますが、フォーム内のプルダウンなどの選択肢によって送信先が変えられるCGIがなくて困っております。 御存じの方はお教えくださいませんでしょうか。商用可能なもの、レンタルではないものがベターなのですが…よろしくお願い致します。

    • ベストアンサー
    • CGI
  • セレクトメニューで計算

    プルダウンで商品何を選んだら、何円って計算されていく方法がありますよね。 今回、お願いがあります。 予算の関係で、良いレンタルサーバーを借りれませんでした。また、CGIについてそんなに詳しくありませんが、フォームからメール送信をさせることは、できます。これから色々勉強していきたいと思いますが、今回はメール送信する方法をとりたいと思っています。 <OPTION value="3000"> プルダウンで何かを選んだ場合、value="3000"が、メールに表示されます。 しかし、これだと何の商品を選んだかがわかりません。 注文者が選んだ商品を、即計算しながら、なおかつ、フォーム送信された際に、商品名と金額がくっついてくる方法がありますでしょうか。

  • JAVASCRIPTで送信フォームを作っています

    JAVASCRIPTで送信フォームを作っています。 ラジオボタンだけが値をだしてくれません。 なにか方法はあるのでしょうか。 アンケートにつかいます。 各項目を答えるごとに裏でテキスト化されて最終的に一括送信できるようにします。

  • 1フォーム上でメニューを切り替えたい

    こんにちは。Windows Formについてお教えください。言語はVBです。 フォームには左メニュー、右メニューが配置されています。 左メニューのボタンをクリックすることにより、右メニューに表示される項目を変更しようと思います。 右メニューの大きさは常に固定にしようと思っています。 1つのフォーム上で、右メニューの中身を変更するには、どのようなコントロールを使えばいいのでしょうか? または、複数フォームを作って、それを右メニューで呼び出すというやり方になるんでしょうか? よろしくお願いいたします。

  • 選択項目を必須にできるフリーのメールフォーム

    選択項目(ラジオボタン、チェックボックス、プルダウン等)を必須にできるフリーのメールフォームのCGIやPHPをご存知の方がいましたら教えていただきたいと思います。 選択項目のいずれかを選択しなければ、送信できないといったものです。 また、こんなスクリプトを書けばいけますなどでも結構です。 どなたかお願い致します。。

    • 締切済み
    • CGI
  • 子フォームから開いたフォームと親子関係を結びたい(VB2003)

    子フォームから開いたフォームと親子関係を結びたい(VB2003) VB.NET2003についての質問です。 formMain のクラスに以下のコードを書いて実行させると、form1がformMainの子フォームとして開きます 下記は、「form1」を「formMain」の子フォームとして開くコードです。 (formMainクラス内のコードです)   ------------------------------   Dim f As New form1   Me.IsMdiContainer=True   f.MdiParent=Me   f.Show   ------------------------------ form1には、form2を開くボタンが用意されています。 質問内容は、このform2を、formMainの子フォームとして開くにはどうすればよいか、ということです。 ためしに、form1クラスに以下のコードを書いて実行させたところ、 「formMainは型であるため、式として利用することができない」というエラーメッセージが出てしまいました。   ------------------------------   Dim f As New form2   f.MdiParent = formMain   f.Show()   ------------------------------ 以上、よろしくお願い致します。

  • IEでの送信フォームについて

    IEでの送信フォームに関する質問です。 フォームの入力欄以外にカーソルをあてて Enter(Return)キーを押すと、 自動的にフォーカスが「送信」ボタンにいってしまい、 送信扱いになってしまいます。 <form> ~ </form>の部分で上記のような現象がおこります。 NNではおこりませんでした。 このフォーカスを無効にするにはどのような方法が あるでしょうか。どうかアドバイスをよろしくお願いします。