アプリ版:「スタンプのみでお礼する」機能のリリースについて

javascriptでの二重送信防止(submitボタンの無効化)ができません。

【HTML】
<form name="fm" method="post" onsubmit="return dclk()">
<input type="submit" name="smt" value="送信" /><br />
</form>


【javascript】
function dclk(){
document.fm.smt.disabled = true;
return false;
}

これだと、サブミットボタンを押すとボタンが無効化され、その後、送信自体が
キャンセルさるのですが、これだと送信自体ができないので意味がありません。
これはなんとか意味はわかります。

そこでreturn falseを省くと送信されると同時にサブミットボタンが無効化されるのかな?と思ったら、
今度は送信されるようですが送信されたと同時にボタンが無効化されません。

どうすべきでしょうか?

ネットで調べたらいろいろな方法があるようで、上記のHTMLとjavascriptのコードで
なんとかならないでしょうか?

A 回答 (2件)

送信する相手は誰ですか?


この場合、actionも指定されていませんし、javascript内で送信しているわけでもないので、自分自身(html?)に送信されています。
事実上再読み込みされるだけですね。

ボタンを無効にして、再読み込み(=自分自身に送信)。
再読み込みされたので、ボタンが有効(=初期状態)になります。

なんら不可思議な現象ではありません。

おそらく、元の参考にしたソースコードはonsubmitで呼ばれた関数内でAJAXで送信処理していたんじゃないでしょうか?
それだと、return false にする意味があります。

やりたい事は、サーバ上のCGIなどにデータを渡したいんですよね?
画面遷移せずに?→AJAXで送信する処理を関数dclk に追加する必要があります。
画面遷移をする?→formにactionを指定します。

二重送信防止と言いながら、そもそも何も送信していない事がワケの判らない事になっている原因ではないかと思いますよ。
    • good
    • 0

送信ボタンが input[type=submit] に限定されるのなら、input[type=submit] のみを無効化すれば実装できるはずですが…。


http://jsfiddle.net/AF5YD/1/
    • good
    • 0

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