![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になります。
現在、HTML中に下記のソースを記述しセレクトボックスの数量が選択されたときに自動計算をしようとしています。
-------------------------------------------------------------------
<table summary="ご購入内容">
<tr>
<th><p>カレンダー</p></th>
<td class="price">1,000円(税込)</td>
<td class="select">
<input type="hidden" name="field16_name" value="カレンダー" />
<input type="hidden" name="field16_req" value="no" />
<select type="select" id="item1" name="field16_text" accesskey="a" tabindex="1" onchange="keisan();">
<option value="0"> 0部</option>
<option value="1"> 1部</option>
<option value="2"> 2部</option>
<option value="3"> 3部</option>
<option value="4"> 4部</option>
<option value="5"> 5部</option>
</select></td>
</tr>
</table>
<table summary="小計金額">
<tr>
<th><p>小計金額</p></th>
<td><input type="text" id="sender-shoukei1" name="field21_text" value="0" accesskey="k" tabindex="6" />
円(税込)</td>
</tr>
<tr>
<th><p>送料</p></th>
<td>
<input type="text" id="sender-postage1" name="field22_text" value="0" accesskey="k" tabindex="7" />
円(税込)</td>
</tr>
</table>
<table summary="合計金額" class="inner-02 m20">
<tr class="gokei">
<th>合計金額</th>
<td>
<input type="text" id="sender-goukei" name="field29_text" value="0" accesskey="k" tabindex="14" />
円(税込)</td>
</tr>
</table>
-------------------------------------------------------------------
<script type="text/javascript">
/* <![CDATA[ */
function keisan(){
/* 商品 */
var price1 = document.form.field16_text.options[document.form.field16_text.selectedIndex].value;
var field21_text= parseInt(price1)*1470 ;
/* 小計 */
document.form.field21_text.value = addFigure(field21_text);
/*送料 */
var price1p = 0;
if ( price1 < 2 ) {
price1p = price1 * 290;
} else {
price1p = 0;
}
var field22_text = parseInt(price1p);
if ( field21_text > 5000 ) {
field22_text = 0;
}
document.form.field22_text.value = addFigure(field22_text);
/* 合計 */
var field29_text = parseInt(field21_text);
document.form.field29_text.value = addFigure(field29_text);
function addFigure(str) {
var num = new String(str).replace(/,/g, "");
while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
return num;
}
}
/* ]]> */
</script>
-------------------------------------------------------------------
しかし、「'document.form.field16_text'はNullまたはオブジェクトではありません」とエラーが出てしまいます。
アンダーバーは利用できないのでしょうか?どこに問題があるのかお教えください。
どうぞ宜しくお願いいたします。
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>
fujillinさん ありがとうございます。
初歩的なミスをおかしていました。
<form>タグは入れていたのですが、
「name=form」がありませんでした。
formを追加したら動作いたしました。
計算方法についても参考にさせていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Selectボックスの幅を自動で広...
-
プルダウン 項目が多いので先頭...
-
jQuery セレクトボックスで選択...
-
テクストボックスからセレクト...
-
フォームで開始時間と終了時間...
-
セレクトボックスで現在選択さ...
-
JavaScriptでプルダウンのサイ...
-
onchange等のイベントハンドラ...
-
document.form で nullまたは...
-
JQuery selectが反映されない
-
追加ボタンを押した際に ok ボ...
-
return trueとreturn falseの用...
-
【jQuery】input nameの文字列...
-
ラジオボタンにタブインデック...
-
value内に変数を入れたい
-
formで項目を連結したい
-
テキストフィールド未入力の場...
-
submitした値を返したい
-
フォーム内で記入したクエリ送...
-
チェックボックス付きのテーブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウン 項目が多いので先頭...
-
Selectボックスの幅を自動で広...
-
CSVファイルを読みこみ、プルダ...
-
jQuery セレクトボックスで選択...
-
JQuery selectが反映されない
-
selectメニューのselectedの位...
-
onFocusOutが複数回呼ばれる!
-
フォームのメニューリストを外...
-
セレクトを全て選択されていな...
-
現在時刻を取得してフォームのs...
-
Selectの中身をfor文で入れる
-
javascriptでselectボックスの<...
-
html selectの内容を初期値に戻す
-
ブラウザの戻るボタンを押した...
-
プルダウンで現在の年月日を取...
-
リストボックスの項目の順番を...
-
プルダウンとテキストの連動
-
<textarea>にプルダウンを表示...
-
DBの値を利用して、3つの連動し...
-
UWSCのIE操作でプルダウンを選...
おすすめ情報