1

jqueryカスタムイベントについてもっと学ぼうとしているので、テストを行うためにこの簡単なコードを作りました:

<!DOCTYPE html>
<html>
    <head>
        <title>Jquery custom events</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        <script>
            $(function(){
                $('#link1').click(function(){
                    var that = $(this);
                    $.ajax({
                        url: "http://localhost/jquery/index.html",

                        beforeSend: function(event){ // if returned false, stops ajax request
                           return that.trigger('ajax:beforesend',[{p1: '1'},{p2: '2'}]);

                        },
                        success: function(){
                            that.trigger('ajax:success');
                        },
                        error: function(){
                        }
                    });

                    return false;
                });

                $('#link1').bind('ajax:beforesend',function(e,data,data2){
                    alert("success"+data2.p2);
                    return false;
                });

                $('#link1').bind('ajax:success',function(e){
                    alert("success");

                });
            });
        </script>
    </head>

    <body>
        <a id="link1">link1</a>

        <div id="box" style="width:500px;height:150px;background-color: gray;margin-top: 50px;">
            result
        </div>
    </body>

</html>

私の質問は: beforesend 関数で、トリガーされたカスタム イベントの結果が false であるが機能していない場合、ajax 要求を中止したいのですが、何が欠けていますか?

編集: beforesend 関数に注目しないでください。私が本当に欲しいのは、イベントが呼び出された場所 (この場合は send 関数の前) にカスタム イベントの結果 (true または false の例) を返す方法です。私が言ったように、これは単なる定型コードです。現実世界のプロジェクトではありません。

4

1 に答える 1

0

beforeSendはAjaxイベントです。beforeSend関数でfalseを返すと、リクエストがキャンセルされます。jQuery 1.5以降、リクエストのタイプに関係なく、beforeSendオプションが呼び出されます。

ここでbeforesendajaxイベントハンドラーを確認し、http://api.jquery.com/jQuery.ajax/を試してください。

おそらくあなたの問題はbeforesend関数の中にあります。

于 2012-05-05T15:34:34.427 に答える