そのハンドラ関数に渡されたイベントを取得しています。.ajax()
POST リクエストを使用してフォームを送信する場合(を使用することを検討して.post()
ください)、デフォルトの動作 (つまり、フォームの送信) を防止する必要があります。
$("form").on("submit", function(e){
e.preventDefault();
// Send the form data using .ajax() or .post()
});
return false
誰か (数週間前の私など) が関数の最後に配置することを提案した場合は、 jQuery イベント: Stop (Mis)Using Return False (約 2 年前) の記事を参照してください。
上記は、フォームが AJAX を使用して送信され、通常のフォーム送信としても役立つ場合に役立ちます。しかし、あなたの問題は送信ボタンを2回押しているようです(偶然または意図的に)。あなたの答えで指摘したように、これに対する解決策は、BalusCが彼の答えで指摘したように、短い(人間の)/長い(コンピュータの)時間の後にボタンを無効にすることです:
$(document).ready(function () {
$("form").submit(function () {
setTimeout(function () {
$('input[type=submit]').attr('disabled', 'disabled');
}, 50);
});
});