• ベストアンサー

DOM + Javascript について

 プルダウンメニューで注文数を変更できるオーダーフォームがあると思いますが、注文数を変更した後、再計算といったボタンでリフレッシュしなければ反映されません。 これをプルダウンを選んだ次点(onChange)で変更した注文数に小計・合計等を再計算したいと思っています。    DOM + Javascriptで可能と思っているのですが、参考になるようなサイトを紹介して頂けないでしょうか? できれば具体的に行っているところが嬉しいです^^; #プルダウンを選択するとテキスト表示の小計と合計を再計算する。その他<input type=hidden~等も更新したいです。

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

  • ベストアンサー
noname#199778
noname#199778
回答No.1

特にDOMを利用する必要はないように思いますが… とりあえず、プルダウンメニューで注文数を指定する形で、プルダウンメニューが選択・変更された時(onChange)に小計・合計を再計算するスクリプトを組んでみました。 こういった形ではいかがでしょうか。 <html> <head> <title></title> <script type="text/javascript"><!-- subsum= new Array(); price= new Array(); price[0]=500;// 商品1の単価 price[1]=1000;// 商品2の単価 price[2]=1500;// 商品3の単価 function totalculc(){ x=document.f1.numof; sum=0; for (i=0; i<x.length; i++){ subsum[i]=price[i]*x[i].value; document.f1.subtotal[i].value=subsum[i]+"円"; sum+=subsum[i]; } document.f1.total.value=sum+"円"; } //--></script> </head> <body> <form name="f1" action="***.cgi" method="post"> <p>商品1:価格500円 / 個数= <select name="numof" onChange="totalculc()"> <option value="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> <option value="6">6</option> </select> / 小計:<input type="text" name="subtotal" readonly style="border: none;"> </p> <p>商品2:価格1000円 / 個数= <select name="numof" onChange="totalculc()"> <option value="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> <option value="6">6</option> </select> / 小計:<input type="text" name="subtotal" readonly style="border: none;"> </p> <p>商品3:価格1500円 / 個数= <select name="numof" onChange="totalculc()"> <option value="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> <option value="6">6</option> </select> / 小計:<input type="text" name="subtotal" readonly style="border: none;"> </p> <p>合計:<input type="text" name="total" readonly style="border: none;"> <input type="submit" value="送信する"> <input type="reset" value="やり直し"></p> </form> </body> </html> 商品の種類については、それぞれの商品ごとのp要素を丸々一つコピーして追加し、またscript要素の商品の単価を入れた配列の要素を追加することで、対応できると思います。 それぞれの注文数のselect要素と、小計のinput要素につけたnameについては、重複させて構いません(というか、そのままにしておかないと、このスクリプトではうまくいきません)。 隠しフォームにデータを送るのであれば、totalculc()関数の中に、隠しフォームに対してデータを書き込むように処理を加えておけばよいでしょう。 DOMを利用するという点の目的が、ちょっとわからなかったのですが、小計などの値を操作されたくないのと、テキストボックスではなくプレーンテキストで表示しているように見せたいということかなと勝手に想像して、それぞれのinput要素にreadonlyを指定し、スタイルシートで境界線を表示しないようにしました。 DOMを利用するという意図がこういうことでなければ、不必要かもしれませんが… こんな感じのものでしょうか? 参考になれば幸いです。 見当違いでしたら、ごめんなさい。

select_nao
質問者

お礼

早速の回答ありがとうございました! テキストボックスに表示するところまではできていたのですが、外観に違和感がありますし、勝手に数字を変更される心配があり、DOMを使うしかないかなと思っていました。 <input type=text~>をスタイルシートでテキストデータと見せかける事ができるんですね。 大変勉強になりました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • JavaScript DOMについて

    JavaScriptの勉強を始めて、1か月程度の初心者です。 JavaScriptを使って、計算したり、カレンダーを作ったり、 HTMLの要素の内容を変更させたり、削除したり、 スタイルシートのプロパティ?を変更して、背景色を変えたり、要素を移動したり、 イベントを使用したりと、出来ることは増えてきて、勉強するのが楽しくなってきたのですが、 いまだにDOM操作についていまいち理解できていません。 具体的にDOMとはどこからどこまでなんでしょうか? JavaScriptに組み込まれているオブジェクト(Date,Math、String、Array) 以外のものは、すべてDOM操作と言う事でしょうか? イベントハンドラだとか、タイマ機能?(windowオブジェクトのsetTimeout()メソッド)なども DOMと言う事でしょうか? どなたかわかりやすく説明してもらえると嬉しいです。

  • JavaScriptによる自動計算フォーム

    サンプルを読んだりは多少わかる範囲なのですが、カスタムの段階で詰まってしまいましたのでお知恵お貸し頂ければと思います。 積算の自動計算フォームを作成しようとしてるのですが、サンプルでよくあるものが固定数値×プルダウン=小計のようなものが多く、この固定数を入力フォーム、プルダウンも入力フォームに切り替えたいのですが、変更すると合計欄がNaNと表示されてしまいます。 何か指定が間違っているのでしょうか。 こちらのサイトを参考に作っています。 http://www.tagindex.com/javascript/form/comp1b.html 宜しくお願いします。

  • JavaScriptのパフォーマンスについて

    JavaScriptのパフォーマンスについて質問です。 いくつもの関数の間で、変数を利用する際、 関数の引数にして受け渡すことが一番パフォーマンスが良いと思います。 ただ、もしそれができない場合、 ・グローバル変数にして、複数の関数で利用することと、 ・HTMLのINPUT(type="hidden")などに置いておいて、DOM操作で取得すること どちらの方が、クライントのパフォーマンスが良いのでしょうか。

  • javascriptにてHTMLのhiddenエリアのvalueを変更したい

    javascriptにてHTMLのHIDDENエリアのVALUEをフォームの値が変わるごとに更新していきたいのですが、やり方がいまいちわかりません。 <input type = "text" value="10" id="aaa" onchange=aaa();/> <input type = "text" value="20" id="bbb" onchange=aaa();/> <input type = "hidden" name="abc" value="aaa"/> <script> function aaa(){ document.abc.value = document.getElementById("aaa").value+document.getElementById("bbb").value ; } </script> このような感じで考えていますが、進みません。どなたかご教授お願いいたします。

  • Javascriptの加工

    javascriptによる利益額の計算表を作りたいと思い、javascriptを勉強しています まだ勉強中で自分で0から作るのは難しいので、いろいろ検索して、下の質問のANo.5のサンプルを加工してみようと思いました http://okwave.jp/qa/q6963771.html このサンプルだと、このような表になっています この下にプルダウンで選んだ表が作成されます ▼プルダウン |(1)材料名|(2)一人前当たりの材料数|(3)[入力欄]人前|(4)合計材料数| これに(3)と同じような列を加えた表に加工したいと思っています。 やりたいこととしては、下のような感じです ▼プルダウン |(1)商品名|(2)標準単価|(3)[入力欄A]個|(4)[入力欄B]%|(4)合計材料数(単価×A×B)| もうすこし説明しますと、 プルダウンで家電フロア・AVフロアなどを選択すると、(1)(2)に商品名・商品の価格が表示 (3)に5個のような共通の台数を入れ、 (4)に80と入力して80%の価格で売ると指定 (5)に各商品の標準単価×5個×80% (全品5台限り、80%で売ると各商品の合計金額が表示されるというような感じで) こういったものを作りたいと思い、Javascriptの辞典を片手に加工しようとしているのですが、表が表示されなくなってしまったり、(4)の入力欄が表示されなくなってしまったりと苦戦しています。 どのように加工すればよいのか教えてください><

  • <input type="hidden" name = "hoge">

    <input type="hidden" name = "hoge">があったとします。 これを、javascriptを使用し nameで検索します。 ”hoge”を検索後、その”hoge”という名前を変更する方法を探しています。  <input type="hidden" name = "hoge">        ↓↓↓↓↓ <input type="hidden" name = "fuga">  リフレッシュ無しで、上記のようにnameを変える方法が知りたいです。 ご存知の方おりましたら、お手数ですが教えていただけませんでしょうか。 宜しくお願いいたします。

  • javascriptでの時間計算

    教えて下さい。 工数集計プログラムをMySQL、PHP、javascriptを用いて開発しようと していますが、その中で、時間の計算をなんとかjavascriptで自動的 に計算させようと考えています。 1日データとして複数行(いくつかの工数)存在して、それぞれの行 で時間をプルダウン化し、選択されると同時に合計値が計算されるよう な事を考えています。 selectイベントか何かで取得し、計算させようかと考えていますが、 何か参考になるようなサンプルはないでしょうか。。 よろしくお願いします。

  • 【DOM】HTMLのタグに対してはElementインターフェースが使えない?

    HTMLの「document」はXMLDocumentと完全に見立ててDOMを利用できないのでしょうか? <html>   <style>     .foo{       background: #999999;     }   </style>   <body>     <input class="foo" type="text" value="NNNN"/>   </body>   <script language=JavaScript type=text/javascript>   function hoge(){     var Nodes;     Nodes = document.getElementsByTagName("input");     alert(Nodes.item(0).nodeName)     alert(Nodes.item(0).getAttributeNode("class"))     alert(Nodes.item(0).hasAttributeNode("class"))   }   hoge();   </script> </html> 上記のようなコードを書いてもアラートに「foo」と表示されません。 また、hasAttributeNodeにおいては全く反応がありません。 DOMのElementインターフェースが使えないとすれば、 JavascriptからclassやonClickのイベントハンドラなど、 属性を動的に変更するにはどうすればいいでしょうか? 制限事項としてid属性やname属性は使用できません。 IE6での使用です。 以上、よろしくお願いします。

  • javascriptについて

    Javascriptを使用して簡単なツールを作りたいのですが、初心者なので分からず困っています。詳しく教えて頂けると助かります! 現状このような感じで、機能していない状態です。ここにjavascriptで、プルダウンで選択したものによって表示する内容を変えるためにはどのような文にしたら良いのでしょうか? 例えば、プルダウンで【卵】【焼く】を選択した時には、【目玉焼き】 【ゆでる】に変えると、【ゆで卵】といったように、組み合わせこどに表示される内容を変えたいです。 また、検索ボタンやリセットボタンを連動させたいです。検索ボタンを押すと結果が余っているスペースに表示されるようにしたいです。色々と申し訳ありませんが、教えて頂けると助かります! <!DOCTYPE html> <html lang="ja"> <head> <title>サンプル</title> </head> <body> <h1>見出し</h1> <form><input type="hidden" id="auth_token" name="auth_token" value="06482d99b3270c4fe048edc8a8d1ea38f2411567"> <select name="材料"> <option value="1">卵</option> <option value="2" selected>じゃがいも</option> <option value="3">にんじん</option> </select> </form><br> <form><input type="hidden" id="auth_token" name="auth_token" value="06482d99b3270c4fe048edc8a8d1ea38f2411567"> <select name="調理"> <option value="1">焼く</option> <option value="2" selected>ゆでる</option> <option value="3">蒸す</option> </select> </form> <form><input type="hidden" id="auth_token" name="auth_token" value="06482d99b3270c4fe048edc8a8d1ea38f2411567"> <input type=" submit" name="search" value=" 検索" /> <input type="reset" value="リセット"> </form> </body> </html>

  • javascriptを使った自動計算→送信

    https://sv62.xserver.jp/~healing-rose/healing-rose.com/form_test/order_form.php こちらのサイトのような感じの注文フォームを作成したいと思っています。 そこで、上記のサイトで言う、「品種選択 × 本数」の自動計算の部分をjavascriptで作成しました。 そして自動計算した金額と、商品名・個数を反映させた注文フォームを PHPで作りたいと思っています。 PHPの知識は、人が作ったものをカスタマイズする程度しかないのですが、 いつも通りフォームを作ったら自動計算された部分が送信確認の画面で表示されなくなってしまいました。 自動計算の部分は http://www.tagindex.com/javascript/form/comp1a.html このサイトに書いてある通りにしているのですが、 例えば <td>商品サンプル2</td> <td align="right">1,000円</td> <td><select name="goods2" onChange="keisan()"> <option>0</option> <option>1</option> <option>2</option> <option>3</option> <option>4</option> <option>5</option> </select></td> この部分の「select name="goods2"」をそのまま<?php echo($str_goods2); ?>としても反映されないんです…(当たり前ですか?) そこで聞きたいのですが、javascriptで自動計算したあとに、参考サイトのような感じで 注文フォーム→送信ということは可能なのでしょうか? PHPで自動計算…等検索してみたのですが、自動計算になるとjavascriptしか出てきません。 参考サイトの注文フォームと同じようなものの作り方を教えてください。