Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么要将回调函数转换为JQuery.Event_Javascript_Jquery_Onclick - Fatal编程技术网

Javascript 为什么要将回调函数转换为JQuery.Event

Javascript 为什么要将回调函数转换为JQuery.Event,javascript,jquery,onclick,Javascript,Jquery,Onclick,我有下面的代码,它应该显示一个DIV,然后触发一个显示第二个DIV的回调。由于某种原因,每当我执行它时,confirmPayment函数永远不会执行。当我在调试器中查看它时,它会说confirmPayment回调是JQuery.Event对象,而不是函数。这没有道理,你知道为什么会这样吗 $(function(){ var socket = io.connect('http://localhost:3000'); var confirmPayment = function(){ sock

我有下面的代码,它应该显示一个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);

 });
$(函数(){
var socket=io.connect('http://localhost:3000');
var confirmPayment=函数(){
socket.on('paid',函数(数据){
函数确认器(回调){
$('#confirmed').html(JSON.stringify(data)).show(“slow”);
回调();
};
确认器(函数(){
emit('confirm',{my:'Showing result'});
});
});
};
var sendPayment=功能(确认付款){
$('#submitted').html(d.method+'
'+d.note).show(“slow”); /////为什么这是一个物体///// 确认付款(); /////为什么这是一个物体///// }; $('#doIt')。单击(发送付款); });
sendPayment
被注册为事件回调,因此当jquery调用
sendPayment
时,它将事件作为第一个参数传递

在您的情况下,由于
confirmPayment
是同一范围内的一个闭包函数,您可以从
sendPayment
调用
confirmPayment()

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

            /////WHY IS THIS AN OBJECT?/////
            confirmPayment();
            /////WHY IS THIS AN OBJECT?/////
};
var sendPayment=函数(e){
$('#submitted').html(d.method+'
'+d.note).show(“slow”); /////为什么这是一个物体///// 确认付款(); /////为什么这是一个物体///// };
创建函数时不能传递参数。因此函数
sendPayment
上的参数
confirmPayment
只是该函数的第一个参数,调用该函数时,函数的第一个参数将存储在
confirmPayment

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

如果您想从
sendPayment
中调用
confirmPayment
函数,只需像
confirmPayment()
那样调用它,但请确保没有使用该名称定义的其他变量,因为这样您将尝试调用该新变量

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