javascriptで合計金額を算出したいです。(1/2)

解決済みの質問

javascriptで合計金額を算出したいです。

はじめまして。javascriptに関しまして、初心者ですので是非教えていただけたら幸いです。
ショッピング用のwebサイトを作成していまして、formを商品名も個数もプルダウンで作成した場合、<選択した商品>×<個数>の合計金額の算出は可能でしょうか?また合計金額が3万円以上なら送料無料、3万円未満なら送料一律600円という機能も加えたいのですが・・・
ちなみに消費税の計算は大丈夫です。
どなたかわかる方がいましたら、教えていただけると本当に助かります。どうかよろしくお願い致します。

投稿日時 - 2009-11-01 04:23:48

連想キーワード:

QNo.5412868

困ってます

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

ちょっとしゅうせい。
それにしても、いつもながら、だめだなぁ~。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Script-Type" content="application/javascript">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>TEST</title>
<style type="text/css">
td input {
 text-align : right;
 border: 0px none;
}
tfoot td {
 text-align : right;
}
td select {
 width:15em;
}
td em {
 font-style: normal;
 color: green;
 font-size:80%;
}
</style>
</head>
<body>

<form action="#" action="#" name="tyuumon">
 <table border="1">
  <thead>
   <tr>
    <th>部門</th>
    <th>商品名</th>
    <th>単価</th>
    <th>個数</th>
    <th>小計</th>
   </tr>
  </thead>
  <tbody id="copymoto">
   <tr id="copymoto2">
    <td>
     <select name="bumon">
      <option value="none" selected>選択してちょ</option>
      <option value="bunrui01">分類1</option>
      <option value="bunrui02">分類2</option>
      <option value="bunrui03">分類3</option>
      <option value="bunrui04">分類4</option>
     </select>
    </td>
    <td>
     <select name="shouhin">
      <optgroup label="none">
       <option value="0" selected>最初に分類を選択して</option>
      </optgroup>
      <optgroup label="bunrui01">
       <option value="0" selected>商品を選択して</option>
       <option value="1000">01置時計</option>
       <option value="2000">01腹時計</option>
      </optgroup>
      <optgroup label="bunrui02">
       <option value="0" selected>商品を選択して</option>
       <option value="3000">02置時計</option>
       <option value="4000">02腹時計</option>
      </optgroup>
      <optgroup label="bunrui03">
       <option value="0" selected>商品を選択して</option>
       <option value="5000">03置時計</option>
       <option value="6000">03腹時計</option>
      </optgroup>
      <optgroup label="bunrui04">
       <option value="0" selected>商品を選択して</option>
       <option value="7000">04時計</option>
       <option value="8000">04腹時計</option>
      </optgroup>
     </select>
    </td>
    <td>
     <input type="text" value="0" name="tanka" size="10">
    </td>
    <td>
     <input type="text" value="0" name="kosu" size="8">
    </td>
    <td>
     <input type="text" value="0" name="shokei" size="12">
    </td>
   </tr>
  </tbody>
  <tfoot>
   <tr>
    <td colspan="4">送料<em id="untin">&nbsp;</em></td>
    <td><input type="text" value="0" name="souryo" size="8"></td>
   </tr>
   <tr>
    <td colspan="4">合計</td>
    <td><input type="text" value="0" name="gokei" size="8"></td>
   </tr>
  </tfoot>
 </table>
</form>

<script type="text/javascript"><!--
//@cc_on

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;
   }
 }
};

var calc = function ( ) {
 var total = 0;
 var form = document.forms[ 'tyuumon' ];
 var tanka = form.elements[ 'tanka' ];
 var kosu = form.elements[ 'kosu' ];
 var shokei = form.elements[ 'shokei' ];

 var n = tanka.length;
 var tmp;
 while( n-- ) {
  tmp = parseFloat( tanka[ n ].value ) * parseFloat( kosu[ n ].value );
  if(! isNaN( tmp ) ) {
   shokei[ n ].value = tmp;
   total += tmp;
  }
 }
 if( 30000 <= total ) {
  document.getElementById('untin').firstChild.nodeValue = '(無料)';
  form.elements['souryo'].value = 0;
  
 } else {
  document.getElementById('untin').firstChild.nodeValue = '(*)';
  form.elements['souryo'].value = 600;
  total += 600;
 }
 form.elements['gokei'].value = total;
}


var n = 4;
var saki = document.getElementById( 'copymoto' );

while( n--)
 saki.appendChild(
  document.getElementById( 'copymoto2' ).cloneNode( true )
 );

var form = document.forms[ 'tyuumon' ];
var bumon = form.elements[ 'bumon' ];
var shouhin = form.elements[ 'shouhin' ];
var tanka = form.elements[ 'tanka' ];
var kosu = form.elements[ 'kosu' ];
var func;
n = bumon.length;

while( n-- ) {
 func = SelectGroup( shouhin[ n ] );

 bumon[n]./*@if(@_jscript) attachEvent('on' + @else@*/ addEventListener( /*@end@*/
  'change', (function(_, e){return function (){_(e.value); };})(func, bumon[n]), false);

 shouhin[n]./*@if(@_jscript) attachEvent('on' + @else@*/ addEventListener( /*@end@*/
  'change', (function(e, e2, e3){
   return function (){
    e2.value = e.value;
    if( e3.value=='' || e3.value=="0" ) e3.value = 1;
    calc();
   };})(shouhin[n], tanka[n], kosu[n]), false);

 kosu[n]./*@if(@_jscript) attachEvent('on' + @else@*/ addEventListener( /*@end@*/
  'change', calc, false);
 
 func('none');
}



//-->
</script>
</body>
</html>

投稿日時 - 2009-11-03 13:07:27

お礼

IEでなければ、本当に求めていたものです!
本当にお時間頂いてありがとうございます!!

投稿日時 - 2009-11-04 19:56:00

ANo.7

2人が「このQ&Aが役に立った」と投票しています

[  前へ  |  ]

ベストアンサー以外の回答(8件中 1~5件目)

ANo.9

かんちがいしているとおもわないけど
#7の
    /*@
    target.add( new Option() );
    target.length--;
    @*/

/*@
target.options[ target.length ] = new Option();
setTimeout((function(_){return function(){_.options[_.length-1]=null}})(target),100);
@*/
にかえると、IEでもなんとかうごきます。

投稿日時 - 2009-11-05 17:29:11

お礼

本当にご丁寧にありがとうございます。
IEでも大丈夫でした!
なんとか組み込むこともできました。
このたびは、本当にありがとうございました。

投稿日時 - 2009-11-07 23:50:10

ANo.8

ちょっと、だめ2なこーどで、おちこんできた。
selectのopthionを、かくれselectとに、いききしているのだけど、
がめんのかきかえが、IEだとおもったようにならなかった。
くにくのさくとして、なにもないoptionを、ついかして、すぐに
さくじょしようとしたら、ついかしたものがにんしきされるまで
じかんがかかるようで、すぐにさくじょできない!
なので、さらにくにくのさくとして、じかんをおいてさくじょ。
まじ、だめなみほん。もうしわけない。

/*@
target.options[ target.length ] = new Option();
setTimeout((function(_){return function(){_.options[_.length-1]=null}})(target),100);
@*/

投稿日時 - 2009-11-03 21:17:01

お礼

返事が遅れてしまって申し訳ございません。
いままでいただいた意見を参考に、がんばってみます。
本当に1から10までありがとうございます!

投稿日時 - 2009-11-04 19:51:57

ANo.6

ごめんIEだと。ぜんぜんだめだぁ~。

投稿日時 - 2009-11-03 12:41:00

ANo.5

こんなのはどう?
でもIE6だと、selectのきょどうがへん!ここまでかいてからきづいた。
ぜんかくくうはくは、すべてはんかくに。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Script-Type" content="application/javascript">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>TEST</title>
<style type="text/css">
td input {
 text-align : right;
 border: 0px none;
}
tfoot td {
 text-align : right;
}
td select {
 width:15em;
}
td em {
 font-style: normal;
 color: green;
 font-size:80%;
}
</style>
</head>
<body>

<form action="#" action="#" name="tyuumon">
 <table border="1">
  <thead>
   <tr>
    <th>部門</th>
    <th>商品名</th>
    <th>単価</th>
    <th>個数</th>
    <th>小計</th>
   </tr>
  </thead>
  <tbody id="copymoto">
   <tr id="copymoto2">
    <td>
     <select name="bumon">
      <option value="none" selected>選択してちょ</option>
      <option value="bunrui01">分類1</option>
      <option value="bunrui02">分類2</option>
      <option value="bunrui03">分類3</option>
      <option value="bunrui04">分類4</option>
     </select>
    </td>
    <td>
     <select name="shouhin">
      <optgroup label="none">
       <option value="0" selected>最初に分類を選択して</option>
      </optgroup>
      <optgroup label="bunrui01">
       <option value="0" selected>商品を選択して</option>
       <option value="1000">01置時計</option>
       <option value="2000">01腹時計</option>
      </optgroup>
      <optgroup label="bunrui02">
       <option value="0" selected>商品を選択して</option>
       <option value="3000">02置時計</option>
       <option value="4000">02腹時計</option>
      </optgroup>
      <optgroup label="bunrui03">
       <option value="0" selected>商品を選択して</option>
       <option value="5000">03置時計</option>
       <option value="6000">03腹時計</option>
      </optgroup>
      <optgroup label="bunrui04">
       <option value="0" selected>商品を選択して</option>
       <option value="7000">04時計</option>
       <option value="8000">04腹時計</option>
      </optgroup>
     </select>
    </td>
    <td>
     <input type="text" value="0" name="tanka" size="10">
    </td>
    <td>
     <input type="text" value="0" name="kosu" size="8">
    </td>
    <td>
     <input type="text" value="0" name="shokei" size="12">
    </td>
   </tr>
  </tbody>
  <tfoot>
   <tr>
    <td colspan="4">送料<em id="untin">&nbsp;</em></td>
    <td><input type="text" value="0" name="souryo" size="8"></td>
   </tr>
   <tr>
    <td colspan="4">合計</td>
    <td><input type="text" value="0" name="gokei" size="8"></td>
   </tr>
  </tfoot>
 </table>
</form>

<script type="text/javascript"><!--
//@cc_on

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 calc = function ( ) {
 var total = 0;
 var form = document.forms[ 'tyuumon' ];
 var tanka = form.elements[ 'tanka' ];
 var kosu = form.elements[ 'kosu' ];
 var shokei = form.elements[ 'shokei' ];

 var n = tanka.length;
 var tmp;
 while( n-- ) {
  tmp = parseFloat( tanka[ n ].value ) * parseFloat( kosu[ n ].value );
  if(! isNaN( tmp ) ) {
   shokei[ n ].value = tmp;
   total += tmp;
  }
 }
 if( 30000 <= total ) {
  document.getElementById('untin').firstChild.nodeValue = '(無料)';
  form.elements['souryo'].value = 0;
  
 } else {
  document.getElementById('untin').firstChild.nodeValue = '(*)';
  form.elements['souryo'].value = 600;
  total += 600;
 }
 form.elements['gokei'].value = total;
}


var n = 4;
var saki = document.getElementById( 'copymoto' );

while( n--)
 saki.appendChild(
  document.getElementById( 'copymoto2' ).cloneNode( true )
 );

var form = document.forms[ 'tyuumon' ];
var bumon = form.elements[ 'bumon' ];
var shouhin = form.elements[ 'shouhin' ];
var tanka = form.elements[ 'tanka' ];
var kosu = form.elements[ 'kosu' ];
var func;
n = bumon.length;

while( n-- ) {
 func = SelectGroup( shouhin[ n ] );
 bumon[n]./*@if(@_jscript) attachEvent('on' + @else@*/ addEventListener( /*@end@*/
  'change', (function(_, e){return function (){_(e.value); };})(func, bumon[n]), false);
 shouhin[n]./*@if(@_jscript) attachEvent('on' + @else@*/ addEventListener( /*@end@*/
  'change', (function(e, e2, e3){
   return function (){
    e2.value = e.value;
    if( e3.value=='' || e3.value=="0" ) e3.value = 1;
    calc();
   };})(shouhin[n], tanka[n], kosu[n]), false);
 kosu[n]./*@if(@_jscript) attachEvent('on' + @else@*/ addEventListener( /*@end@*/
  'change', calc, false);
 
 func('none');
}
//-->
</script>
</body>
</html>

投稿日時 - 2009-11-03 09:53:49

ANo.4

しょしんしゃだからって、えんりょすることないじょ!
なっとくするまで、きけばよいよ。

>要するに商品名A=3500円、商品名B=4000円という宣言がないと
せんげん、というか、しょうひんめいのたんかりすとがないと・・

<select~>
 <option value="1000">腕時計
 <option value="5000">腹時計

みたいにして、しょうひんをえらぶと、たんかを知るすべが
あるのだけど、どうする?

商品が50個あると、その商品名に応じた単価をどこから
もってくるかだよ。
とりあえず、きぼうは?

投稿日時 - 2009-11-02 18:08:28

補足

気を使っていただいて本当にありがとうございます!!
というか、こんなに付き合っていただいて申し訳ないです。
是非
<select~>
 <option value="1000">腕時計
 <option value="5000">腹時計
で計算可能になるのでしたら、教えて頂きたいです。

一応今の状況を書いてまとめてみました。
今、a.htmlに商品が9個あり、すべて3500円、
商品名は仮に置時計1、置時計2・・・、置時計9
です。b.htmlに商品が20個あり、すべて3000円、
商品名は仮に茶碗1、茶碗2、・・・、茶碗20です。
まだ大分先ですが、今後c.htmlで商品20個、d.htmlで
商品30個と増えていく予定です。

  商品名          個数      合計
置時計4(shinaban1) × 10個(kosu1) = 35000円
茶碗1(shinaban2)  × 3個(kosu2) = 9000円
茶碗2(shinaban3)  × 5個(kosu3) = 15000円
茶碗10(shinaban4)  × 1個(kosu4) = 3000円

送料0円
合計53000円
                        送信

というものが作りたいです。


<select~>
 <option value="3500">置時計1
 <option value="3500">置時計2



 <option value="3500">置時計10
 <option value="3000">茶碗1



 <option value="3000">茶碗20
と、気合いで上記のようにすべて記述すれば、
商品を選択したときに単価を知れるのですか?
この記述により、プルダウンで商品名を選択した
ときにその商品の値段のデータを持ってきて、
前の回答で記述して頂いたプログラムで掛け算を
実行できるということですか?

本当に厚かましいですが是非これでできるなら、
そのプログラムを教えてほしいです。

投稿日時 - 2009-11-03 03:19:59

あわせてチェックしたい
  • 送料一律について ...
  • 一律送料はいいの? ...
  • JavaScript Form OPTION value ...
PR
【回答募集中】花粉にひと言、物申す![ 詳細 ]

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら