3

送信ボタンと、クリックすると何かを実行する次のコードがあります。

<input name="Update" class="LongSubmit" id="Update" type="submit" WaitingValue="Updating..." value="Update"/>

        $('.LongSubmit').click(function() {
            $(this).attr('disabled', 'disabled');
            $(this).addClass('AjaxInProgress');
            $(this).val($('.LongSubmit').attr('WaitingValue'));
            $(this).closest('form').submit(); // Added so it submits the form
        })

コメント行なしでこのハンドラーを追加すると、フォームが送信されなかったため、フォームを追加すると、フォームが送信されます。

ただし、送信ボタンをクリックして通常どおり投稿内のフォームをクリックするとキーが表示さUpdateれますが、クリックハンドラー内でプログラムで実行すると、そのキーは表示されません。

フォームのPOSTにまったく影響を与えずに(つまり、updateそこにキーを持っている)、送信ボタンのクリックイベントを処理するにはどうすればよいですか?
(または、ハンドラーが存在しないかのように正確にエミュレートするにはどうすればよいですか?)


Zefirynが指摘しているように、これはボタンを無効にするためですが、複数回のクリックを防ぐためにこれを実行したいと思います。

4

3 に答える 3

2

送信ボタンを無効にしない場合は、他の手法を使用して二重送信をブロックできます。例えば:

var submitFlag = 0;
$(function(){
    $('form').submit(function(){
        return submitFlag++ == 0;
    });
});

これにより、フォームの二重送信がブロックされます。このフラグは、ページのリロードまたはポストバックでリセットされます (また、Ajax を使用している場合は、これを拡張して、Ajax 応答でもこのフラグをリセットできます)。これはあなたを助けることができますか?

于 2012-08-21T14:04:26.047 に答える
1

フォームが送信された後にのみボタンを無効にすることで、ゼフィリンの助けを借りてこれを解決することができました:

    $(function() {

        $('.LongSubmit').click(function() {
            $(this).closest('form').submit();
            $(this).addClass('AjaxInProgress');
        })

        function DisableAjaxButtons() {
            $('.AjaxInProgress').val($('.AjaxInProgress').attr('WaitingValue'));
            $('.AjaxInProgress').attr('disabled', 'disabled');
        }

        $('form').submit(function() {
            setTimeout(DisableAjaxButtons, 1);
        })
    });

誰かがこれを超えたアイデアを持っているかどうか (IMO) を知りたいのですが、フォームの送信後にタイマーを作成するためのハッキーな解決策があります。

于 2012-08-21T14:41:22.490 に答える
0

キーの更新は、更新入力からのものです。送信ボタンですが、送信ボタンは必ずPOSTで送信されるのでどこに問題があるのか​​わかりません。このフィールドを POST から削除する場合は、 (または他のタグ) に変更<input>して、フォームを送信するクリック ハンドラーを追加します。<button>

于 2012-08-21T10:27:48.333 に答える