フォームの二重投稿を防止する

submitと同時にボタンをdisabledにする。

やり方

ページロードイベント中に以下を追加。

$('form').on('submit', function() {
    // 全てのボタンをdisabledにする
    $('button, input[type="submit"]').prop("disabled", true);
}).on('click', '[type=submit]', function() {
    var form = $(this).closest('form');

    // 押されたボタンと同名のhidden inputを作成する
    if (this.name) {
        form.children('input[type="hidden"].madeByScript').remove();
        form.append($('<input/>', {
            type: 'hidden',
            name: this.name,
            value: this.value,
            class: 'madeByScript'
        }));
    }
});

説明

単純にボタンをdisabledにするだけだとボタンに値が設定されていた場合にその値が飛ばなくなる。そこでsubmit前にボタンと同じnameとvalueを持つinputを作成して値を飛ばす。confirmでキャンセルされると作成したinputが残ってしまうため削除処理も入れておく。