32

私はこの小さなコードを持っています:

<script>
$(window).bind('beforeunload', function() {
  $.ajax({
    async: false,
    type: 'POST',
    url: '/something'
    });
  });
</script>

ユーザーが送信ボタンを押したときにこのリクエストを無効にするにはどうすればよいでしょうか。

基本的には、SOでここのようなものです。質問をしてページを閉じると、警告ウィンドウが表示されますが、フォームを送信するときには警告ウィンドウは表示されません。

4

7 に答える 7

46

イベントハンドラーunbindを使用して呼び出します。beforeunload

$('form#someForm').submit(function() {
   $(window).unbind('beforeunload');
});

フォームが送信されないようにするには、次の行を追加します。

   return false;
于 2011-01-24T22:37:08.450 に答える
20

使用する

$('form').submit(function () {
    window.onbeforeunload = null;
});

メインの送信機能を実行する前に、これがあることを確認してください。(もしあれば)

于 2013-06-20T19:08:57.657 に答える
0

これが私たちが使用するものです:

ドキュメントの準備ができたら、beforeunload関数を呼び出します。

$(document).ready(function(){
    $(window).bind("beforeunload", function(){ return(false); });
});

submitまたはlocation.reloadの前に、変数のバインドを解除します。

$(window).unbind('beforeunload');
formXXX.submit();

$(window).unbind("beforeunload"); 
location.reload(true);
于 2014-08-28T09:14:11.067 に答える
0

ASP.NET WebアプリケーションのDetectonbeforeunloadを探していたのですが、マスターページとコンテンツページでASP.NETを使用しているページで、入力コントロールが変更された場合に警告メッセージを表示する必要があります。マスターページで3つのコンテンツプレースホルダーを使用していますが、最後のプレースホルダーはフォームの後にあります

<form runat="server" id="myForm">

したがって、フォームの終了タグの後、本文の終了タグの前にこのスクリプトを使用しました

<script>
        var warnMessage = "Save your unsaved changes before leaving this page!";
        $("input").change(function () {
            window.onbeforeunload = function () {
                return 'You have unsaved changes on this page!';
            }
        });
        $("select").change(function () {
            window.onbeforeunload = function () {
                return 'You have unsaved changes on this page!';
            }
        });
        $(function () {
            $('button[type=submit]').click(function (e) {
                window.onbeforeunload = null;
            });
        });
    </script>

バインディングに関する限り、beforeunloadはこの方法では確実に機能しません。ネイティブに割り当てる必要があります

したがって、このバインドのように機能し、バインド解除も機能しませんでした。jQuery1.7以降では、イベントAPIが更新され、下位互換性のために.bind()/。unbind()を引き続き使用できますが、推奨される方法は次のとおりです。 on()/ off()関数を使用します。

于 2014-09-10T06:06:26.510 に答える
0
 <!DOCTYPE html>
 <html>
  <head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  <script type="text/javascript" src="http://cdn.jsdelivr.net/jquery.dirtyforms/2.0.0-beta00006/jquery.dirtyforms.min.js"></script>
  <script type="text/javascript">
    $(function() {
        $('#form_verify').dirtyForms();
    })
  </script>
  <title></title>
 <body>
<form id="form_verify" action="a.php" method="POST">
    Firt Name <input type="text">
    Last Name <input type="file">
    <input type="submit">   
</form>

于 2015-10-20T12:36:56.487 に答える
0

bindを使用している場合は、次を使用します。

$('form').submit(function () {
    $(window).unbind('beforeunload');
});

これは、すべてのフォーム送信に適しています。

于 2019-06-25T07:21:16.697 に答える
0

超古い質問ですが、他の人にも役立つかもしれません。

「submit」イベントから「beforeunload」をデタッチするだけでは機能しません。ユーザーが修正する必要のあるフォームにエラーがあった場合でも、送信ハンドラーが呼び出されていたためです。したがって、ユーザーがフォームを送信しようとしてエラーを受け取り、別のページをクリックした場合、警告なしに離れることができます。

これが私の回避策で、かなりうまくいくようです。

(function($) {

    var attached = false,
        allowed = false;

    // catch any input field change events bubbling up from the form
    $("form").on("change", function () {
        // attach the listener once
        if (!attached) {
            $("body").on("click", function (e) {
                // check that the click came from inside the form
                // if it did - set flag to allow leaving the page
                // otherwise - hit them with the warning
                allowed = $(e.target).parents("form").length != 0;
            });

            window.addEventListener('beforeunload', function (event) {
                // only allow if submit was called 
                if (!allowed) {
                    event.preventDefault();
                    event.returnValue = 'You have unsaved changes.';
                }

            });
        }                
        attached = true;
    });

}(jQuery));

このように、クリックしてページをフォーム内から離れる場合(送信ボタンなど)、警告は表示されません。クリックしてページを離れるのがフォームの外部から発信された場合、ユーザーに警告します。

于 2020-04-17T18:08:20.173 に答える