如何在javascript中将函数作为参数传递

时间:2011-12-18 16:33:57

标签: javascript jquery html

我有一个弹出对话框,我试图让它尽可能动态,所以我可以发送任何我想要的功能。我想创建一个回调函数,这样我就可以传递我想要的任何函数,它会在我的对象上做任何我需要的东西(在这个例子中只是打印一些东西来测试它。

以下是调用弹出窗口时发生的情况:

function DisplayPopUp(obj, callback) {


    //On Action Clicked
    $('#actionButton').click(function(e){
       e.preventDefault();
       callback(Obj);
    });
}

这是激活PopUp功能的函数

$('.delete').click(function(){
    var obj="something something";
    DisplayPopUp(obj,function(){console.log('going to delete');});
});

不知何故,这不起作用,我从firebug得到这个错误:

Obj is not defined

显然我没有正确地转移我的功能 - 我应该怎么做?

4 个答案:

答案 0 :(得分:2)

您正在呼叫callback(Obj),但您的变量名称为obj。检查你的情况。

答案 1 :(得分:1)

当您在DisplayPopup()中调用回调时,请传递参数obj,而不是Obj

答案 2 :(得分:1)

好吧,Obj未定义 。它应该是obj

收到错误消息时,您应该做的第一件事就是阅读它。 :)

答案 3 :(得分:1)

我发现此代码存在多个可能的问题:

首先,Obj的情况是错误的。它应该是这样的:

function DisplayPopUp(obj, callback) {

    //On Action Clicked
    $('#actionButton').click(function(e){
       e.preventDefault();
       callback(obj);
    });
}

但是,第二,我认为你没有正确使用事件处理程序。您正在通过单击处理程序调用DisplayPopup。但是,在该单击处理程序中,您将在另一个对象上安装另一个单击处理程序。这真的是你想要做的吗?除非你从这里留下了一堆代码来创建/销毁actionButton或取消绑定点击处理程序,否则每次点击删除按钮时,你都可以轻松地在#actionButton上使用多个点击处理程序。