ようこそゲスト さん ユーザー登録 ログイン

Javascriptでsubmit処理をしています。

以下のようなソースを書いているのですが、Submit用のボタン(画像)を押しても再クリック出来てしまいます。

二重送信させたくないのですが、どのような書き方をすればよいのでしょうか?
ソースの訂正・アドバイスいただければと思います。


▼フォームのソース
<form action="test.php" method="post" name="reqForm">
<a id="formSbm" href="javascript:formSubmit();"><img src="sbm_button.jpg"></a>
</form>

▼Javascriptのソース
function formSubmit(){
document.reqForm.submit();
document.reqForm.formSbm.disabled = true;
return false;
} Javascriptでsubmit処理をしています。 以下のようなソースを書いているのですが、Submit用のボタン(画像)を押しても再クリック出来てしまいます。 二重送信させたくない.. を含むブックマークはてなブックマーク - Javascriptでsubmit処理をしています。 以下のようなソースを書いているのですが、Submit用のボタン(画像)を押しても再クリック出来てしまいます。 二重送信させたくない.. - 人力検索はてな

  • kt26 あなたも質問に答えられます! ウォッチリストに追加 twitterアイコンTwitterでつぶやく
  • 状態:終了
  • 回答数:2 / 45件
  • 回答ポイント:70ポイント
  • 登録:2008-02-09 14:56:04
  • 終了:2008-02-16 15:00:06
  • カテゴリー:ウェブ制作ウェブ制作

1 回答者:GoldenDawn 2008-02-09 16:52:39 満足! 35ポイント

案1)

submit されたかどうかを管理する変数を追加する

submitted = false ; // Submit フラグ

function formSubmit() {
  if (submitted == true) return ; 
  submitted = true ;
  document.reqForm.submit() ;
  return false ;
}

案2)

a 要素では disabled の値は無効なので button 要素に変えます。

見た目がボタンになるのが嫌ならスタイルシートで変更します。

<form action="test.php" method="post" name="reqForm">
<button id="formSbm" onclick="formSubmit();"><img src="sbm_button.jpg"></button>
</form>
質問者:kt26 2008-02-10 01:13:37

案1の方法はあまり上手く行きませんね・・。


案2のボタンは良い方法ですが、「a要素にしたい」からそうしているわけで、見た目の問題だけじゃないんです。

2 回答者:t_shiono 2008-02-10 17:58:16 満足! 35ポイント

こんにちは

GoldenDawnさんの案1でも問題ないように思えるのですが、ひょっとして再クリックできてしまうというのは、フォームはsubmitされなくても、リンクが存在しているだけで駄目ということでしょうか?

それであれば、以下のようなのはいかがですか?

HTML

<form action="test.php" method="post" name="reqForm">
<!-- サブミット前に表示 -->
<div id="before" style="display: block">
<a id="formSbm" href="javascript:formSubmit();"><img src="sbm_button.jpg"/></a>
</div>
<!-- サブミット後に表示 -->
<div id="before" style="display: none">
<img src="sbm_button.jpg">
</div>
</form>

JavaScript

function formSubmit() {
  // <a>タグ付きの<img>タグを非表示にする
  document.getElementById('before').style.display = 'none';
  // <a>タグなしの<img>タグを表示する
  document.getElementById('after').style.display = 'block';

  document.reqForm.submit() ;
}

目的によってはちょっと冗長かもしれませんが。

何かの参考になれば。

質問者:kt26 2008-02-10 18:37:07

GoldenDawnさんの案1では、何回もボタンをクリック出来てしまうんです。


t_shionoさんの方法だと上手くできるのですが、「aタグあり/なしに切り替えている」ので、同じIMGタグがありますし、ソースも増えてしまいます。


こちらは、目的としては出来ているので、参考とさせていただければと思います。ありがとうございます。

おとなり質問

この質問・回答へのコメント

http://www.openspc2.org/reibun/javascript/form/002/
フラグ変数を1つ使ったほうが簡単だと思います。

-------
document.reqForm.formSbm.disabled = true;
これで、Aタグを非活性にしてるつもりだと思うのですが、
実際には、そういう動作はしないと思います。
コメントでいただいた先のURLの方法を試していますが、
<input type="submit">
の、ボタンならalertが表示し、上手くできますが
aタグを使った、submit送信の場合、上手くできません。

あくまでも、Javascriptの送信+二重送信の防止が出来ればと思っています。

この質問・回答へのトラックバックこの質問・回答へのトラックバック