プロが教える店舗&オフィスのセキュリティ対策術

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に続きを書きます。

A 回答 (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 );
}
// -->
    • good
    • 0
この回答へのお礼

何度もすみません。書いていただいたスクリプトをはめ込み使用してみた所、きちんとVALUE値が送信できるようになりました。また、スクリプトとにらめっこし、ラジオボタン+ラジオボタンの場合や、ダミーフォームを使用せず、一つのフォーム内で済ませるやり方も何とか考え付くことができました。

pipipi523様のご回答がなければ解決することは出来なかったと思います。これでクライアントの要望に応える事が出来ます。本当にありがとうございました。

お礼日時:2006/09/06 17:38

前段階の質問で回答させていただいた者です。


その質問ではラジオボタンになっていたので、一応その場合のスクリプトを・・

まぁ参考にしてみてください。

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 );
}
    • good
    • 0
この回答へのお礼

先日は大変お世話になりました。こちらの質問にもお答えいただき、感激です。
書いていただいたスプリクトですが、pipipi523様のスクリプトと一緒に(合わせて?)使用することで、ラジオボタン使用時のVALUE値否取得の件も解消することができました。
ありがとうございました。本当に助かりました。

お礼日時:2006/09/06 17:24

こんな感じ?


<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』となってしまいます。原因が分かりますか?お手数をお掛けしますが、お答えいただければ幸いです。

補足日時:2006/09/06 13:47
    • good
    • 0

JavaScriptで文字列連結も可能ですが、CGIを変更するのが一番らくだと思いますよ(ライセンス上可能なら、ですけど)。



どうしてもJavaScriptでやる場合は、
<form ... onsubmit="getElementById('option5').value+=','+getDocumentById('option6').value+','+getDocumentById('option7').value;true;">

とかすればいいんですけど(textboxの場合)、結局CGI側で連結したテキストを分割しないといけないんじゃないですか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
>CGI変更
その通りなんですよね。それが一番簡単なんですが、配布元にも有償でいいからカスタマイズして下さい!と頼んでみたところ断られてしまったんです。

お礼日時:2006/09/06 14:05

質問者です。

サブ用の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は全く分かりませんので、はちゃめちゃな事を言っていたらすみません。出来れば、このスクリプトをコピーしろ!くらい詳細な回答がいただけると助かります。また、連結させたいフィールドが、テキストエリアの場合、チェックボックスの場合、ラジオボタンの場合など、違う記述が必要な場合も書いていただけると非常に助かります。

よろしくお願いします!!!!
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!