• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:チェックボックスで合計値を計算に機能追加したい)

チェックボックスで合計値を計算に機能追加したい

このQ&Aのポイント
  • チェックボックスで差引き値を計算し、さらに差引き値を一定値以下にしないものを制作したいとおもいます。
  • チェックボックスごとに決まった値が引かれるものと、チェックボックスに2つ以上チェックで一定値が引かれる2種類が希望です。
  • 完成形イメージを画像添付致します。

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

  • ベストアンサー
  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.3

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head>  <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">  <title></title> <script type="text/javascript"> //@cc_on document./*@if (@_jscript) attachEvent ('on' + @else@*/ addEventListener ( /*@end@*/ 'click', function(evt){  var t = evt./*@if(1) srcElement @else@*/ target /*@end@*/;  var f, i, s, v, j;  if ( t.type != 'checkbox' ) {   return;  }    s = t.form.elements;    if ( /(^| )Check1( |$)/.test( t.form.className ) ) {   f = parseFloat( s['VALUE'].defaultValue );      j = 0;   for ( i = 0; i < s.length; ++ i ) {    if ( s[i].type != 'checkbox' ) continue;        if ( s[i].checked ) {     j ++;    }   }      f -= 0.5 * Math.floor( j / 2 );      s['VALUE'].value = f < 2.0 ? Number(2.0).toFixed(1) : f.toFixed(1);     } else if ( /(^| )Check2( |$)/.test( t.form.className ) ) {   f = parseFloat( s['VALUE'].defaultValue );      for ( i = 0; i < s.length; ++ i ) {    if ( s[i].type != 'checkbox' ) continue;        if ( s[i].checked ) {     f -= parseFloat(s[i].value);    }   }   s['VALUE'].value = f < 2.0 ? Number(2.0).toFixed(1) : f.toFixed(1);  } }, false ); document./*@if (@_jscript) attachEvent ('on' + @else@*/ addEventListener ( /*@end@*/ 'submit', function(evt){  var t = evt./*@if(1) srcElement @else@*/ target /*@end@*/;    if ( /(^| )Check1( |$)/.test( t.className ) || /(^| )Check2( |$)/.test( t.className ) ) {   evt./*@if(1) returnValue = false @else@*/preventDefault ()/*@end@*/;  } }, false ); </script> </head> <body>  <form action="#" class="Check1">   <div>    <label>1</label><input type="checkbox" name="CK1_1"><br>    <label>2</label><input type="checkbox" name="CK1_2"><br>    <label>3</label><input type="checkbox" name="CK1_3"><br>    <input type="text" name="VALUE" value="2.5">   </div>  </form>  <form action="#" class="Check2">   <div>    <label>1</label><input type="checkbox" name="CK1_1" value="0.3"><br>    <label>2</label><input type="checkbox" name="CK1_2" value="0.3"><br>    <label>3</label><input type="checkbox" name="CK1_3" value="0.2"><br>    <label>4</label><input type="checkbox" name="CK1_4" value="0.2"><br>    <label>5</label><input type="checkbox" name="CK1_5" value="0.2"><br>    <label>6</label><input type="checkbox" name="CK1_6" value="0.1"><br>    <label>7</label><input type="checkbox" name="CK1_7" value="0.1"><br>    <input type="text" name="VALUE" value="2.5">   </div>  </form> </body> </html>

suzushiro7510
質問者

お礼

yuu_x様 丁寧なご回答ありがとうございます。 希望の形での動作となりました。 jsの経験がない中での作業で 素早く、的確なコードをいただき大変助かりました。 ありがとうございました。

その他の回答 (2)

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.2

数字の差し替えとは具体的にどのような内容になりますでしょうか?  if ( /(^| )Check1( |$)/.test( t.form.className ) || /(^| )Check2( |$)/.test( t.form.className ) ) {   f = parseFloat( s['VALUE'].defaultValue );      for ( i = 0; i < s.length; ++ i ) {    if ( s[i].type != 'checkbox' ) continue;        if ( s[i].checked ) {     f -= parseFloat(s[i].value);    }   }   s['VALUE'].value = f < 2.0 ? Number(2.0).toFixed(1) : f.toFixed(1);  } あたりを差し替えれば可能ですが、 また、勝手な判断で追加してしまったのですが、サーバーサイドスクリプトへ送信する場合は、 document./*@if (@_jscript) attachEvent ('on' + @else@*/ addEventListener ( /*@end@*/ 'submit', function(evt){  var t = evt./*@if(1) srcElement @else@*/ target /*@end@*/;    if ( /(^| )Check1( |$)/.test( t.className ) || /(^| )Check2( |$)/.test( t.className ) ) {   evt./*@if(1) returnValue = false @else@*/preventDefault ()/*@end@*/;  } }, false ); の部分を削除してください。

suzushiro7510
質問者

補足

yuu_x様 ご回答ありがとうございます。 >>数字の差し替えとは具体的にどのような内容になりますでしょうか? 例えばチェックボックスが6つで、2つ以上にチェックで合計値から-0.5減少など、 現在、check1はいずれか1つで数値が減少していますが、 これを2つ以上にチェックで数値を減少にしたいものです。 よろしくお願いいたします。

  • yuu_x
  • ベストアンサー率52% (106/202)
回答No.1

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head>  <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">  <title></title> <script type="text/javascript"> //@cc_on document./*@if (@_jscript) attachEvent ('on' + @else@*/ addEventListener ( /*@end@*/ 'click', function(evt){  var t = evt./*@if(1) srcElement @else@*/ target /*@end@*/;  var f, i, s;  if ( t.type != 'checkbox' ) {   return;  }    s = t.form.elements;    if ( /(^| )Check1( |$)/.test( t.form.className ) || /(^| )Check2( |$)/.test( t.form.className ) ) {   f = parseFloat( s['VALUE'].defaultValue );      for ( i = 0; i < s.length; ++ i ) {    if ( s[i].type != 'checkbox' ) continue;        if ( s[i].checked ) {     f -= parseFloat(s[i].value);    }   }   s['VALUE'].value = f < 2.0 ? Number(2.0).toFixed(1) : f.toFixed(1);  } }, false ); document./*@if (@_jscript) attachEvent ('on' + @else@*/ addEventListener ( /*@end@*/ 'submit', function(evt){  var t = evt./*@if(1) srcElement @else@*/ target /*@end@*/;    if ( /(^| )Check1( |$)/.test( t.className ) || /(^| )Check2( |$)/.test( t.className ) ) {   evt./*@if(1) returnValue = false @else@*/preventDefault ()/*@end@*/;  } }, false ); </script> </head> <body>  <form action="#" class="Check1">   <div>    <label>1</label><input type="checkbox" name="CK1_1" value="0.5"><br>    <label>2</label><input type="checkbox" name="CK1_2" value="0.5"><br>    <label>3</label><input type="checkbox" name="CK1_3" value="0.5"><br>    <input type="text" name="VALUE" value="2.5">   </div>  </form>  <form action="#" class="Check2">   <div>    <label>1</label><input type="checkbox" name="CK1_1" value="0.3"><br>    <label>2</label><input type="checkbox" name="CK1_2" value="0.3"><br>    <label>3</label><input type="checkbox" name="CK1_3" value="0.2"><br>    <label>4</label><input type="checkbox" name="CK1_4" value="0.2"><br>    <label>5</label><input type="checkbox" name="CK1_5" value="0.2"><br>    <label>6</label><input type="checkbox" name="CK1_6" value="0.1"><br>    <label>7</label><input type="checkbox" name="CK1_7" value="0.1"><br>    <input type="text" name="VALUE" value="2.5">   </div>  </form> </body> </html> <!-- 全角スペースでインデントしてありますので、半角スペース等に置換してからご利用ください -->

suzushiro7510
質問者

お礼

素早く、的確なご回答をありがとうございました。 いただいたソースをそのまま入れて、希望通りの動作となりましたので、 大変助かりました。 全角スペースでインデントしてありますので、半角スペース等に置換してからご利用ください 最後のこの一文が実はよくわかってなかったりしますが、 これに関してはお任せ致します。 ありがとうございました。

suzushiro7510
質問者

補足

お礼を申し上げた後で申し訳ないのですが、 Check1に対して、チェックボックスに2つ以上チェックで 数字が差し替わるにはどう変更したらいいでしょうか? 重ねてのご質問ですみませんが、 よければご回答いただければと思います。 よろしくお願いいたします。