0

DIV を表示し、2 番目の DIV を表示するコールバックをトリガーする次のコードがあります。何らかの理由で実行するたびに、confirmPayment関数が実行されません。デバッガーで見ると、confirmPaymentコールバックはJQuery.Event関数ではなくオブジェクトであると表示されます。これは意味がありません、なぜこれが起こっているのか分かりますか?

$(function(){
var socket = io.connect('http://localhost:3000');
var confirmPayment = function(){
    socket.on('paid', function (data) {
        function confirmEmitter(callback){
            $('#confirmed').html(JSON.stringify(data)).show("slow");
            callback();
        };

        confirmEmitter(function(){
            socket.emit('confirmed', { my: 'Showing result' });
        });
    });
};

var sendPayment = function(confirmPayment){
    $('#submitted').html(d.method + '<br>' + d.note).show("slow");

            /////WHY IS THIS AN OBJECT?/////
            confirmPayment();
            /////WHY IS THIS AN OBJECT?/////
};
$('#doIt').click(sendPayment);

 });
4

2 に答える 2

1

sendPaymentイベント コールバックとして登録されているため、jquery を呼び出すsendPaymentと、イベントが最初のパラメーターとして渡されます。

あなたの場合confirmPayment、同じスコープ内のクロージャ関数であるため、呼び出すことができconfirmPayment()ますsendPayment

var sendPayment = function(e){
    $('#submitted').html(d.method + '<br>' + d.note).show("slow");

            /////WHY IS THIS AN OBJECT?/////
            confirmPayment();
            /////WHY IS THIS AN OBJECT?/////
};
于 2013-04-29T11:43:17.573 に答える
1

関数の作成時にパラメーターを渡すことはできません。したがって、confirmPayment関数sendPaymentのパラメーターはこの関数の最初のパラメーターにすぎず、関数を呼び出すと、関数の最初の引数が に格納されconfirmPaymentます。

この関数は jQuery のクリック イベントによって呼び出され、jQuery のクリックイベントは最初のパラメーターとしてeventObjectを渡します。

confirmPayment内から関数を呼び出したい場合は、 のsendPaymentようconfirmPayment()に呼び出しますが、その名前で定義された他の変数がないことを確認してください。その新しい変数を呼び出そうとするからです。

したがって、 の最初のパラメーターconfirmPaymentを削除するだけsendPaymentです。

于 2013-04-29T11:51:46.233 に答える