- ベストアンサー
ダミーフォームの内容を送信用フォームに受け渡し&文字連結
JavaScriptは超初心者です。想像で喋っておりますので、専門用語等の間違いや見当違いな部分は見逃してください。 比較的安価ですが機能の優れたショッピングカートを使用しております。全てをカートCGIで済ませる他、オリジナルで用意したHTMLからFORMで指定されたCGIに送信することでカートに商品が入る方法も使用でき、現在その方法でショッピングサイトを構築中です。 HTMLでFORM送信する場合、商品名や価格など定められた値のほか、自由項目として5つまで自由にフィールドを増やして、その値をカートに送信することができます。今まではその5つの情報で十分間に合っていたのですが、今回追加を検討している商品の送信したい情報が5つを超えてしまい、その商品だけカートを使わないという方法を取るわけにもいかず、困っています。 ▽CGI機能範囲内の送信情報 商品名・価格・数量・option1~5 ↓ ▽でもこうしたい 商品名・価格・数量・option1~5+追加option6・option7 無理やりoption6・option7を送信しても、ショッピングカート上にはやはりVALUEは表示されませんでした。option1~5という名前で設定されたVALUEしか受け取らないようです。 本当に困り果てていたところ、JavaScriptを使用すればいいのでは?というご意見をいただき、質問させていただきました。 まだまだ長くなりますので、回答1に続きを書きます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>ラジオボタンを使用 No.4さんのスクリプトを入れるとこんな感じだと思います(スクリプトの部分だけ) <!-- function func() { document.F1.opt3.value=getValue( "opt3" ) + "+" + document.F2.opt4.value; document.F1.submit(); } function getValue( name ) { value = ""; e = document.getElementsByName( name ); for( idx=0; idx<e.length; idx++ ) { if( e[ idx ].checked ) {value += e[ idx ].value;} } return( value ); } // -->
その他の回答 (4)
- asahina02
- ベストアンサー率47% (95/202)
前段階の質問で回答させていただいた者です。 その質問ではラジオボタンになっていたので、一応その場合のスクリプトを・・ まぁ参考にしてみてください。 function set() { value = ""; value += getValue( "optionA" ); value += getValue( "optionB" ); document.send.CCC.value = value; } function getValue( name ) { value = ""; e = document.getElementsByName( name ); for( idx=0; idx<e.length; idx++ ) { if( e[ idx ].checked ) { value += e[ idx ].value; } } return( value ); }
お礼
先日は大変お世話になりました。こちらの質問にもお答えいただき、感激です。 書いていただいたスプリクトですが、pipipi523様のスクリプトと一緒に(合わせて?)使用することで、ラジオボタン使用時のVALUE値否取得の件も解消することができました。 ありがとうございました。本当に助かりました。
- pipipi523
- ベストアンサー率40% (148/365)
こんな感じ? <html><body> <script type="text/javascript"> <!-- function func() { document.F1.opt3.value=document.F2.opt3.value + "+" + document.F2.opt4.value; document.F1.submit(); } // --> </script> </form> <form name="F1" action="cart.cgi"> 商品1<input type="hidden" name="sina" value="s1"><br> 価格:49,800円(税込)<input type="hidden" name="kakaku" value="4800"><br> 購入数:<input type="text" size="3" maxlength="3" name="CNT" value="1">個<br> option1<input type="text" size="3" maxlength="3" name="opt1" value="op1"><br> option2<input type="text" size="3" maxlength="3" name="opt2" value="op2"><br> <input type="hidden" name="opt3"> </form> <!--追加オプション用のフォーム--> <form name="F2" action="#"> option3<input type="text" size="3" maxlength="3" name="opt3" value="op3"><br> option4<input type="text" size="3" maxlength="3" name="opt4" value="op4"><br> <input type="button" value="カートへ" onclick="func()"> </body></html>
補足
ありがとうございます。早速試してみました。 追加オプションが、テキストエリアの場合も、SELECTの場合もきちんと送信できました! しかし、追加オプション用のフォームに <input type="radio" name="opt3" value="あ" checked="checked" /> <input type="radio" name="opt3" value="い" /> <input type="radio" name="opt3" value="う" /> <input type="radio" name="opt3" value="え" /> <input type="radio" name="opt3" value="お" /> とラジオボタンを使用すると、opt3のVALUEが『undefined』となってしまいます。原因が分かりますか?お手数をお掛けしますが、お答えいただければ幸いです。
- talepanda
- ベストアンサー率58% (45/77)
JavaScriptで文字列連結も可能ですが、CGIを変更するのが一番らくだと思いますよ(ライセンス上可能なら、ですけど)。 どうしてもJavaScriptでやる場合は、 <form ... onsubmit="getElementById('option5').value+=','+getDocumentById('option6').value+','+getDocumentById('option7').value;true;"> とかすればいいんですけど(textboxの場合)、結局CGI側で連結したテキストを分割しないといけないんじゃないですか?
お礼
回答ありがとうございます。 >CGI変更 その通りなんですよね。それが一番簡単なんですが、配布元にも有償でいいからカスタマイズして下さい!と頼んでみたところ断られてしまったんです。
- CHICHI-512
- ベストアンサー率0% (0/1)
質問者です。サブ用のIDで失礼します。続きを書きます。 商品オーダーページに、ID=Aのダミーフォームを用意、その中で、商品名・価格・数量・option1~5、追加option6・option7を客に入力・選択させます。 その内容を、同ページのID=Bの送信用本命フォームに受け渡す。ですが、option6・option7の内容は送信できませんので、ID=Bに受け渡す際、option5として3つのVALUEを連結させる。 option5のVALUE=option5とoption6・option7が続きで書かれたVALUE ID=BのSUBMITボタンを押した時に一連の作業が行われる??VALUEは重複しない。 ・・・・という感じですが、いかがでしょうか?JavaScriptは全く分かりませんので、はちゃめちゃな事を言っていたらすみません。出来れば、このスクリプトをコピーしろ!くらい詳細な回答がいただけると助かります。また、連結させたいフィールドが、テキストエリアの場合、チェックボックスの場合、ラジオボタンの場合など、違う記述が必要な場合も書いていただけると非常に助かります。 よろしくお願いします!!!!
お礼
何度もすみません。書いていただいたスクリプトをはめ込み使用してみた所、きちんとVALUE値が送信できるようになりました。また、スクリプトとにらめっこし、ラジオボタン+ラジオボタンの場合や、ダミーフォームを使用せず、一つのフォーム内で済ませるやり方も何とか考え付くことができました。 pipipi523様のご回答がなければ解決することは出来なかったと思います。これでクライアントの要望に応える事が出来ます。本当にありがとうございました。