0

フォームには、POST 要求を送信する [PDF を表示] ボタンが含まれています。この投稿リクエストは、Content-disposition: inlineまたはContent-disposition: attachmenthttp ヘッダーを使用して pdf ファイルを表示します。

Chrome でこのボタンをダブルクリックすると、おそらくリクエストが 2 回同時に実行されるため、コントローラーで例外が発生します。

送信ボタンをダブルクリックしてリクエストを1回だけ実行するようにするにはどうすればよいですか?

環境: ASP .NET MVC2 または Mono、jquery、jquery ui。

<form id="_form" method='post' target='_blank' action=''>
  .. form fields and other submit buttons
  <a href='#' id='_savepdf'>Show PDF</a>
</form>
<script type="text/javascript">
$(function () {
    $('#_savepdf').button();
    $('#_savepdf').click(function () { 
      $('#_form')[0].action= '/GetPDF'; 
      $('#_form')[0].submit(); 
     });
  });
</script>

アップデート

ユーザーは、pdf ファイルを閉じて、このボタンをもう一度クリックまたはダブルクリックすることをお勧めします。同じユーザーからのコントローラーの同時実行のみを無効にする必要があります。コントローラが完了したら、ボタンをもう一度クリックできます。

4

2 に答える 2

0

使用e.preventDefault():

$(function () {
    $('#_savepdf').button();
    $('#_savepdf').click(function (e) {  // <---- Don't forget e
      e.preventDefault();    // <------ HERE
      $('#_form')[0].action= '/GetPDF'; 
      $('#_form')[0].submit(); 
     });
});

編集:最初に質問を十分に読んでいないため、ダブルクリックに関する部分を見逃しました。ダブルクリックで何もできないようにするには、リンクにデータ属性を追加してみてください:

<a href='#' id='_savepdf' data-clicked='false'>Show PDF</a>

次に、メソッドで確認して設定できます。

$(function () {
    $('#_savepdf').button();
    $('#_savepdf').click(function () {
        var clickSent = $(this).data('clicked');

        if (clickSent == 'false') {
            $('#_form')[0].action= '/GetPDF'; 
            $('#_form')[0].submit(); 
        }
        $(this).data('clicked', 'true');
     });
});

これにより、リンクをクリックすると属性が設定され、2 回目のクリックで送信ロジックがスキップされます。

于 2013-01-04T21:17:31.817 に答える
0

クリック後にボタンを無効にして、ユーザーが複数回クリックできないようにすることができます。

$('#_savepdf').button().click(function () { 
   $(this).button({disabled: true});
   $('#_form')[0].action= '/GetPDF'; 
   $('#_form')[0].submit(); 
});
于 2013-01-04T21:25:22.980 に答える