2

JSfiddle :コード

POSTで情報を送信しようとしていました; 次に、このコードを追加して、一度送信した後にボタンを無効にしました。

    $('form').submit(function(){
        $('input[type=submit]', this).attr('disabled', 'disabled');
        return true;
    });

しかし:ボタンは無効になり、ページはリロードされますが、フォームは情報を送信していません...解決策をお願いします

PS:上記のコードのような一般的な解決策が必要です。この関数をすべてのフォームに適用する必要があるため、フォームには ID がありません。

4

4 に答える 4

7

そのハンドラ関数に渡されたイベントを取得しています。.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);
    });
});
于 2012-07-05T20:39:39.353 に答える
0

this resolved my problem : https://stackoverflow.com/a/2830812/1436998

$(document).ready(function(){
    $("form").submit(function(){
        setTimeout(function() {
            $('input').attr('disabled', 'disabled');
            $('a').attr('disabled', 'disabled');
        }, 50);
    })
});
于 2012-07-05T21:06:28.520 に答える