ボタンの二度押し防止JavaScript

Posted at 2007-04-13 22:34

今さら感が色濃く漂う話題ですが、submitなボタンの二度押しを防ぐために、内容を送信するときに呼び出されるform要素のonsubmit属性を利用して、送信ボタンを使えなくする試み。フォームが便利(っぽい感じ)になるので、とりあえず一番手軽な方法を。

手軽な方法

<form action="..."
 onsubmit="this.submitBtn.disabled = true;">
  ...
  <p><input type="submit" value="送信" name="submitBtn" /></p>
</form>

submitボタンが押されると、submitボタン自身がdisabled(使用不可)になります。

ただし、ブラウザの戻る機能で戻ってきたときに、ボタンがdisabledのままになってしまいますので、注意が必要です。別にそれでもいいや、という場合には構いませんが、困るのであれば次の方法をどうぞ。

戻ってきてもだいじょうぶな方法

前の方法に加えて、form要素にname属性とid属性(2つの値は同じもの)を書きます。

<form action="..." name="myForm" id="myForm"
 onsubmit="this.submitBtn.disabled = true;">
  ...
  <p><input type="submit" value="送信" name="submitBtn" /></p>
</form>

name属性は、過去の遺物との互換性を保つために(id属性と同じ値を)指定します。XHTML 1.0のStrict DTDやXHTML 1.1では、form要素にname属性を書けないので、id属性だけ書きます。

それから、body要素のonunload属性に、設定を戻す記述をしておきます。

<body onunload="document.myForm.submitBtn.disabled = false;">

これで、ブラウザの戻る機能で戻ってきたときでも、ボタンが使えるようになります。

ほんとうは、HTML/XHTMLの中にスクリプトを書きたくないところですが、短期的な使い捨てページ(?)などでは、気軽にちょろっと書ける、こういった割り切った方法が気楽でいいと思います(コード量が違いすぎます)。そのへんは色々な状況とトレードオフかと。


Tags

Related Tags

Serial Contents