我有以下代码,应显示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);
});
答案 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
。