フォームのセレクトのグループ選択、連動とかできそうなやつ
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <title>TEST</title> <body> <form name="form1" method="post" action="#"> <fieldset> <legend>注文リスト</legend> <input type="radio" name="color_type" value="モノクロ" id="rd0" onclick="LIST(this.value);CALC()" checked> <label for="rd0">白黒</label> <input type="radio" name="color_type" value="カラー" id="rd1" onclick="LIST(this.value);CALC()"> <label for="rd1">カラー</label> <select name="list" onChange="CALC()"> <optgroup label="モノクロ"> <option value="1800" >--------------A(100)</option> <option value="2100" >--------------B(200)</option> </optgroup> <optgroup label="カラー"> <option value="10500" >--------------C(300)</option> <option value="11200" >--------------D(400)</option> </optgroup> </select> 総枚数 <input type="text" size="10" name="num" value="" onChange="CALC()"> 枚 合計 <input type="text" size="10" name="total" value=""> 円 </fieldset> </form> <script type="text/javascript"> var CALC = function () { document.forms[ 'form1' ].elements[ 'total' ].value = document.forms[ 'form1' ].elements[ 'list' ].value * document.forms[ 'form1' ].elements[ 'num' ].value; }; var SelectGroup = function ( target ) { var buffer = document.createElement( 'SELECT' ); return function ( v ) { var obj, cnt; while( obj = target.firstChild ) buffer.appendChild( obj ); for( cnt = 0; obj = buffer.childNodes[ cnt++ ]; ) if( 'OPTGROUP' === obj.nodeName && obj.label == v ) { target.appendChild( obj ); break; } } }; var LIST = SelectGroup( document.forms[ 'form1' ].elements[ 'list' ] ); LIST('モノクロ'); </script>
IEだと挙動がおかしいので修正
var SelectGroup = function ( target ) { var buffer = document.createElement( 'SELECT' ); return function ( v ) { var obj, cnt; while( obj = target.firstChild ) { 1 == obj.nodeType ? buffer.appendChild( obj ): target.removeChild( obj ); } for( cnt = 0; obj = buffer.childNodes[ cnt++ ]; ) if( 'OPTGROUP' === obj.nodeName && obj.label == v ) { target.appendChild( obj ); /*@ target.add( new Option() ); target.length--; @*/ break; } } };