【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード

先日、同じタイトルで質問したものです。以前した質問の内容は、以下でご確認下さい。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2387209

今度は違う問題が発生してしまいました。下記スクリプトを設定した購入ボタン(SUBMIT)を押し、ショッピングカートの画面(CGI)に入ると、きちんとJAVASCRIPTで指定した通りにVALUEの受け渡し・文字連結されていることが確認できました。

次に、カート画面の『前の画面に戻る』(onclickでhistory.go(-1)がシステムで設定されてあり変更不可)を押すと、当然商品オーダー画面に戻り、FORM内容もそのまま残っております。

そこで、もう一度同じ商品を同じ内容で購入、もしくは個数を変更・VALUEを変更などして購入しようとすると、購入個数がダブって送信されてしまいます。個数倍以外におかしい点はありませんでした。

1個購入すると → 2個、10個購入すると → 20個

IE7で確認。FIREFOXでは正常に送信されました。IEの何かバグでしょうか? この重複を防ぐような追記スクリプトがあれば教えてください。よろしくお願いします。

<script type="text/javascript">
<!--
function func() {
document.SELECT.option2.value=getValue( "option2a" ) + "/" + getValue( "option2b" );
document.SELECT.option3.value=document.SELECT.option3a.value + "/" + document.SELECT.option3b.value;
document.SELECT.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 );
}
// -->
</script>

A 回答 (2件)

これとIE6で確認してみましたが現象出ません・・


現象の出る簡単な物を提示してみてください^^;

<html><body>
<script type="text/javascript">
質問内のスクリプト
</script>

</form>
<form name="SELECT" 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>
<input type="hidden" name="option2">
<input type="hidden" name="option3">
<INPUT type="checkbox" name="option2a" value="1">2
<INPUT type="checkbox" name="option2b" value="2">3
<INPUT type="checkbox" name="option3a" value="3">2
<INPUT type="checkbox" name="option3b" value="4">3

<input type="button" value="カートへ" onclick="func()">
</form>


---cart.cgi---
#!/usr/bin/perl
&form_dec;
print "Content-type: text/html\n\n";
print "<html><body>";
print $form{sina}."<br>\n";
print $form{kakaku}."<br>\n";
print $form{CNT}."<br>\n";
print $form{option2}."<br>\n";
print $form{option3}."<br>\n";
print $form{option2a}."<br>\n";
print $form{option2b}."<br>\n";
print $form{option3a}."<br>\n";
print $form{option3b}."<br>\n";
print "</html></body>";

sub form_dec {
local($method);
local($query,@abs,$l_set,$value);
$method = $ENV{'REQUEST_METHOD'};
$method =~ tr/A-Z/a-z/;
if($method eq 'post'){read(STDIN,$query,$ENV{'CONTENT_LENGTH'});}
else{$query=$ENV{'QUERY_STRING'};}
@abs = split(/&/,$query);
foreach (@abs) {
($l_set,$value) = split(/=/,$_);
$value =~ tr/+/ /;
$value =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/<>/&lt\;&gt\;/g;
$form{$l_set}=$value;
}
}
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。pipipi523様が上記に書かれたHTMLで実験した所、確かに私の言ったようなバグは見られませんでした。どうやら、私の書いたHTMLに何か原因がありそうです。もう少し自分で検証してみます。
わざわざありがとうございました。解決への糸口が見つかりました。FORMタグ内に原因があると分かれば、あとは色々試すのみです。
この度は本当にお世話になりました。とても助かりました。

お礼日時:2006/09/11 08:58

購入個数に該当するところはどこでしょう?


(購入個数はこのスクリプトに関係ないような気が・・・)

スクリプトが無いときも同じ症状がでますか?
IE6でも同じ症状はでますか?

※IE7はまだβ版なのでIE7のバグのような気がします

この回答への補足

先日は大変お世話になりました。IE6でも同じ症状を確認しました。IEの何かがそうさせているのでは・・・?と考えております。HEADに追記したJavaScriptを取ると症状は回避されましたが、どうしてもこのSCRIPTを使用したいので、現在、JavaScriptの本と格闘中です。
JAVASCRIPTは難しいし奥が深いです・・。

補足日時:2006/09/08 09:33
    • good
    • 0

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