【问题标题】:How do I pass function as a parameter in javascript如何在javascript中将函数作为参数传递
【发布时间】:2011-12-18 16:33:57
【问题描述】:

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

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

function DisplayPopUp(obj, callback) {


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

这里是激活弹出功能的功能

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

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

Obj is not defined

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

【问题讨论】:

  • Obj 大写和小写混用是不是错字?
  • 实际赞成大写拼写错误,反对this。愚蠢的网站!

标签: javascript jquery html


【解决方案1】:

您正在调用callback(Obj),但您的变量名称是obj。检查你的情况。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      嗯,Obj没有定义的。应该是obj

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

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

        • 处理程序在不同的元素上......如果我不得不猜测,我会说他正在实施“你确定吗?”盒子。
        • 我知道它们在不同的元素上。但是假设'.delete' 可以被多次点击,它们最终会在#actionButton 上得到多个点击处理程序,因为每次调用时都会附加一个新的处理程序。这可能是由其余代码处理的,但由于我们看不到这一点,我想我应该将其作为一个可能的问题提及。
        • 我将继续假设#actionButton 是在DisplayPopUp 的间隙中创建的。
        • @TomalakGeret'kal - 正如你所说,这只是一个假设。
        • 你也可以称之为有根据的猜测;)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-10
        • 1970-01-01
        • 2012-10-28
        • 1970-01-01
        相关资源
        最近更新 更多