为什么回调函数被转换为JQuery.Event

时间:2013-04-29 11:42:04

标签: javascript jquery onclick

我有以下代码,应显示DIV,然后触发显示第二个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);

 });

2 个答案:

答案 0 :(得分: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?/////
};

答案 1 :(得分:1)

创建函数时无法传递参数。所以函数confirmPayment上的参数sendPayment只是这个函数的第一个参数,当调用函数时,函数的第一个参数将存储在confirmPayment中。

现在这个函数被jQuery的click事件调用,jQuery的click事件传递eventObject作为第一个参数。

如果您想在confirmPayment内调用sendPayment函数,只需将其称为confirmPayment(),但请确保您没有使用该名称定义其他变量,因为那样你'我会尝试调用那个新变量。

因此,只需删除confirmPayment上的第一个参数sendPayment