• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:セレクトボックスの値から料金を計算したい)

セレクトボックスの値から料金を計算したい

このQ&Aのポイント
  • HTML中にセレクトボックスの数量が選択されたときに自動計算をするためのソースを記述しようとしていますが、「'document.form.field16_text'はNullまたはオブジェクトではありません」というエラーが出てしまいます。
  • アンダーバーが利用できない可能性があります。アンダーバーではなくドットを使用してみてください。
  • 問題が解決しなければ、セレクトボックスの値を取得する別の方法を試してみてください。

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

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

ご提示のソースだと<form>が見当たりませんが、単純な転記ミスでしょうか? タグを設置しても、document.formでは取得できないでしょうから多分エラーになります。 document.forms[0] などを使用するか、idを振っておいて document.getElementById( id ) で取得すればよろしいかと。 でも、ご提示のソースにはinputにそれぞれidがあるので、そちらで直接取得してしまったほうが簡単ですね。 あと、計算方法が不明ですが、なんだかおかしな結果になるようです。 多分、1部のときのみ送料(\290)がかかり、2部以上は無料なんだろうと想像しますが、なんで単価がHTML表示では\1,000なのに計算では\1,470なんだろうとかいう突っ込みは別にしても、現状では合計が合計にはなっていないみたい。 ソースはそのままにして、とりあえずこんな感じでどうでしょうか。 <script type="text/javascript"> /* <![CDATA[ */ function keisan(){ /* 商品 */ var price1 = document.getElementById('item1').value; var field21_text = parseInt(price1)*1470; /* 小計 */ document.getElementById('sender-shoukei1').value = addFigure(field21_text); /*送料 */ var price1p = price1<2?(price1*290):0; //←置き換えました // ↓現状のロジックなら不要(price1p>5000にならない) //var field22_text = parseInt(price1p); //if ( field21_text > 5000 ) { //field22_text = 0; //} document.getElementById('sender-postage1').value = addFigure(price1p); /* 合計 */ document.getElementById('sender-goukei').value = addFigure(field21_text + price1p); function addFigure(str) { var num = new String(str).replace(/,/g, ""); while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2"))); return num; } } /* ]]> */ </script>

genda
質問者

お礼

fujillinさん ありがとうございます。 初歩的なミスをおかしていました。 <form>タグは入れていたのですが、 「name=form」がありませんでした。 formを追加したら動作いたしました。 計算方法についても参考にさせていただきます。 ありがとうございました。