jQueryのoneでフォームの2重送信を防止する


フォームのサブミットボタンをダブルクリックすると、リクエストが何度も飛んでしまうことがあるので、なんとかしてくれって要件がたまにあります。


普通のinput type="submit"だったらdisableにしたりするんじゃないかと思います

$("input[type=submit]").click(function() { $(this).attr("disabled", "disabled"); });


anchorタグとか、なんでもいいんですが、form要素じゃないものにイベント貼り付けてフォームをsubmitさせてるときはどうなるでしょうか

disabled属性は効きません


こんな例をみつけてちょっとなるほどと思ったのでメモしておきます。
jQueryのoneを使うってやつです。

$("a.button").one("click", function(e) {
    e.preventDefault();
    $('form').submit();
    return false;
});

jQueryのoneとか初めてしったんですが、1度だけ呼び出される関数をbindできるみたいですね。


あまりちゃんと検証してないけど、ぱっとみた感じは制御できてそう。



参考 : javascript - Disabling links to stop double-clicks in JQuery - Stack Overflow