• ベストアンサー

ラジオボタンが選択された項目のみ操作可能

ラジオボタンが選択された項目のみ操作できるようにしたいです。 小学校が選択されたら 小学校のチェックボックスとボタンはenable 中学校のチェックボックスとボタンはdisabled?readonly? よろしくお願いします。 <html> <head> <title>ラジオボタンが選択されたらチェックボックス・ボタンを入力可能にする</title> <script Language="JavaScript"><!-- function setRTF() { fOBJ = document.myFORM; RadioNum = 2; // ラジオボタンの数 for (i=0; i<RadioNum; i++) { if (fOBJ["mm"][i].checked) fOBJ["aa"+i].disabled = false; else fOBJ["bb"+i].disabled = true; } } function allcheck(obj,flag){ var target=obj.parentNode.getElementsByTagName("input"); for(var i=0;i<target.length;i++){ if(target[i].type=="checkbox") target[i].checked=flag; } } // --></script> </head> <body> <form name="myFORM"> <table border="1"> <tr> <td><input type="radio" name="mm" onClick="setRTF()">小学校</td> <td><input type="radio" name="mm" onClick="setRTF()">中学校</td> </tr> <tr> <td> <input type="checkbox" name="aa[]" value="1" />A小学校<br/> <input type="checkbox" name="aa[]" value="2" />B小学校<br/> <input type="checkbox" name="aa[]" value="3" />C小学校<br/> <input type="button" value="全選択" onClick="allcheck(this,true)"/><br> <input type="button" value="全解除" onClick="allcheck(this,false)"/> </td> <td> <input type="checkbox" name="bb[]" value="1" />A中学校<br/> <input type="checkbox" name="bb[]" value="2" />B中学校<br/> <input type="checkbox" name="bb[]" value="3" />C中学校<br/> <input type="button" value="全選択" onClick="allcheck(this,true)"/><br> <input type="button" value="全解除" onClick="allcheck(this,false)"/> </td> </tr> </table> </form> </body> </html>

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

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

じゃ、tdにidを振ってみては? <html> <head> <title>ラジオボタンが選択されたらチェックボックス・ボタンを入力可能にする</title> <script Language="JavaScript"><!-- function setRTF(f,n){ for(var i=0; i<f.length; i++){ var p=f[i].parentNode; var pid=""; while(p){ if(p.nodeName=="TD"){pid=p.id;break;} p=p.parentNode; } if(f[i].type=="checkbox" || f[i].type=="button") f[i].disabled=pid!=n; } } function allcheck(obj,flag){ var target=obj.parentNode.getElementsByTagName("input"); for(var i=0;i<target.length;i++){ if(target[i].type=="checkbox") target[i].checked=flag; } } // --></script> </head> <body> <form> <table border="1"> <tr> <td><input type="radio" name="mm" onClick="setRTF(this.form,'aa')">小学校</td> <td><input type="radio" name="mm" onClick="setRTF(this.form,'bb')">中学校</td> <td><input type="radio" name="mm" onClick="setRTF(this.form,'cc')">高校</td> </tr> <tr> <td id="aa"> <input type="checkbox" name="aa[]" value="1" disabled/>A小学校<br/> <input type="checkbox" name="aa[]" value="2" disabled />B小学校<br/> <input type="checkbox" name="aa[]" value="3" disabled />C小学校<br/> <input type="button" value="全選択" onClick="allcheck(this,true)"/ disabled ><br> <input type="button" value="全解除" onClick="allcheck(this,false)" disabled /> </td> <td id="bb"> <input type="checkbox" name="bb[]" value="1" disabled />A中学校<br/> <input type="checkbox" name="bb[]" value="2" disabled />B中学校<br/> <input type="checkbox" name="bb[]" value="3" disabled />C中学校<br/> <input type="button" value="全選択" onClick="allcheck(this,true)" disabled /><br> <input type="button" value="全解除" onClick="allcheck(this,false)" disabled /> </td> <td id="cc"> <input type="checkbox" name="cc[]" value="1" disabled />A高校<br/> <input type="checkbox" name="cc[]" value="2" disabled />B高校<br/> <input type="checkbox" name="cc[]" value="3" disabled />C高校<br/> <input type="button" value="全選択" onClick="allcheck(this,true)" disabled /><br> <input type="button" value="全解除" onClick="allcheck(this,false)" disabled /> </td> </tr> </table> </form> </body> </html>

その他の回答 (4)

回答No.4

ていせいします <input ~/> のすらっしゅは、つけちゃだめだった。

回答No.3

HTMLをすっきりさせたら、すくりぷとがながくなってしまった。^^; そのうち、ちゃんとかいとうがつくでしょう~! ばぶぅ~ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <title>sample</title> <form> <table border="1"> <tr> <td><input type="radio" name="mm">小学校</td> <td><input type="radio" name="mm">中学校</td> <td><input type="radio" name="mm">高校</td> </tr> <tr> <td> <input type="checkbox" name="aa[]" value="1" disabled/>A小学校<br> <input type="checkbox" name="aa[]" value="2" disabled />B小学校<br> <input type="checkbox" name="aa[]" value="3" disabled />C小学校<br> <input type="button" value="全選択"><br> <input type="button" value="全解除"> </td> <td> <input type="checkbox" name="bb[]" value="1" disabled />A中学校<br> <input type="checkbox" name="bb[]" value="2" disabled />B中学校<br> <input type="checkbox" name="bb[]" value="3" disabled />C中学校<br> <input type="button" value="全選択"><br> <input type="button" value="全解除"> </td> <td> <input type="checkbox" name="cc[]" value="1" disabled />A高校<br> <input type="checkbox" name="cc[]" value="2" disabled />B高校<br> <input type="checkbox" name="cc[]" value="3" disabled />C高校<br> <input type="button" value="全選択"><br> <input type="button" value="全解除"> </td> </tr> </table> </form> <script type="text/javascript"> //@cc_on document./*@if (@_jscript) attachEvent('on'+ @else@*/addEventListener(/*@end@*/  'click', function (evt) {   var e = evt./*@if (@_jscript) srcElement @else@*/ target /*@end@*/;   var inp, f, b, c, n, o, tbl, tr, td;         if ('INPUT' === e.nodeName && 'button' === e.type) {    if ('全選択' === e.value) f = true;    if ('全解除' === e.value) f = false;    if (undefined !== f) {     inp = e.parentNode.getElementsByTagName('input');     for (c = 0; o = inp[c]; c++) if ('checkbox' === o.type) o.checked = f;    }   }   if ('mm' === e.name) {    tbl = getParent(e, 'nodeName', 'TABLE');    tr = getParent(e, 'nodeName', 'TR');    td = getParent(e, 'nodeName', 'TD').cellIndex;    tr = tbl.rows[tr.rowIndex + 1];    for (b = 0; n = tr.cells[b]; b++) {     inp = n.getElementsByTagName('input');     for (c = 0; o = inp[c]; c++) o.disabled = b != td;    }   }     }, false); function getParent (node, type, val) {  return node ? (val == node[type]) ? node: arguments.callee(node.parentNode, type, val): null; } document.getElementsByName('mm')[0].click(); </script>

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

横からですが… せっかく >if(f[i].type=="checkbox" || f[i].type=="button") f[i].disabled=f[i].name!=n; まで考えたのならば、その後半でどのようにしてdisabled属性がセットされているのかまでを理解しておきましょう。   f[i].disabled = ( f[i].name != n ) ; は、そのエレメント(=f[i])のname属性が、引数で渡された名前(=ラジオボタンから指定された名前)と同じだったら disabled = false に、そうでなければ disabled = true となるようになっています。 一方、現状のボタンにはname属性が設定されていませんので、どのボタンの場合でも名前が一致することありません。 その結果、常に値はfalseとなって操作可能にセットされていることになります。 なので、そのスクリプトで動作するようにするには、ボタンにも・・・・ ついでに、現状は初期状態で全部のボタンが操作可能になっていますから、それも・・・・ で、うまくいくと思います。

pos_pos
質問者

補足

お世話になります。 ボタンのNAMEの付け方がよくわかりません。 下記のような感じでやってみましたがダメでした... <input type="button" name = "btn[0]" value="全選択" disabled onClick="allcheck(this,true)"/><br> <input type="button" name = "btn[1]" value="全解除" disabled onClick="allcheck(this,false)"/> よろしくお願いします。

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

前回とちがいラジオボタンとチェックボックスの構造的なつながりが 薄いので、名前を指定してやるのが限界でしょうか・・・ <html> <head> <title>ラジオボタンが選択されたらチェックボックス・ボタンを入力可能にする</title> <script Language="JavaScript"><!-- function setRTF(f,n){ for(var i=0; i<f.length; i++){ if(f[i].type=="checkbox") f[i].disabled=f[i].name!=n; } } function allcheck(obj,flag){ var target=obj.parentNode.getElementsByTagName("input"); for(var i=0;i<target.length;i++){ if(target[i].type=="checkbox") target[i].checked=flag; } } // --></script> </head> <body> <form> <table border="1"> <tr> <td><input type="radio" name="mm" onClick="setRTF(this.form,'aa[]')">小学校</td> <td><input type="radio" name="mm" onClick="setRTF(this.form,'bb[]')">中学校</td> <td><input type="radio" name="mm" onClick="setRTF(this.form,'cc[]')">高校</td> </tr> <tr> <td> <input type="checkbox" name="aa[]" value="1" disabled/>A小学校<br/> <input type="checkbox" name="aa[]" value="2" disabled />B小学校<br/> <input type="checkbox" name="aa[]" value="3" disabled />C小学校<br/> <input type="button" value="全選択" onClick="allcheck(this,true)"/><br> <input type="button" value="全解除" onClick="allcheck(this,false)"/> </td> <td> <input type="checkbox" name="bb[]" value="1" disabled />A中学校<br/> <input type="checkbox" name="bb[]" value="2" disabled />B中学校<br/> <input type="checkbox" name="bb[]" value="3" disabled />C中学校<br/> <input type="button" value="全選択" onClick="allcheck(this,true)"/><br> <input type="button" value="全解除" onClick="allcheck(this,false)"/> </td> <td> <input type="checkbox" name="cc[]" value="1" disabled />A高校<br/> <input type="checkbox" name="cc[]" value="2" disabled />B高校<br/> <input type="checkbox" name="cc[]" value="3" disabled />C高校<br/> <input type="button" value="全選択" onClick="allcheck(this,true)"/><br> <input type="button" value="全解除" onClick="allcheck(this,false)"/> </td> </tr> </table> </form> </body> </html>

pos_pos
質問者

補足

yambejpさんへ ボタンも操作不可にできますか? if(f[i].type=="checkbox" || f[i].type=="button") f[i].disabled=f[i].name!=n; こんなふうにやってみましたが... よろしくお願いします。