将参数传递给jquery回调,但也在外部使用回调

时间:2014-03-31 14:25:21

标签: javascript jquery google-chrome

根据SO和this groovy example上的各种帖子,您可以将参数传递给JSON对象内的jQuery回调函数,如下所示:

$("myButton").on("click",{foo:"bar"},runStuff);

这很酷,但是如果我还需要runStuff来处理正常的上下文呢?我正在努力解决这个问题:

让我们说我的回调是一个只打印它的参数的函数:

function printParam(param)
{
    console.log(param);
}

并且应该像这样正常调用此函数:printParam("Hey!");但也可以通过事件调用:

$("body").on("DOMNodeInserted",{foo: "Hey!"},printParam);

我试图像这样实施printParam

function printParam(param)
{
    param = (event.data.foo) ? event.data.foo : param;
    console.log(param);
}

但当然这不起作用,因为event未定义。我有什么选择?

4 个答案:

答案 0 :(得分:1)

这应该做你想要的。

function printParam(param)
{
    param = (param.data) ? param.data.foo : param;
    console.log(param);
}

答案 1 :(得分:1)

使用data .on()参数时,数据不会直接传递给回调,而是传递给Event对象的data属性。功能

示例:

$("myButton").on("click",{foo:"bar"},runStuff);
function runStuff(event) {
  console.log(event.data.foo);
}

因此,您可以使用以下代码致电runStuff

runStuff({data: {foo:"bar"}});

答案 2 :(得分:0)

尝试;

 function printParam(param)
{
    param1 = (param.data.foo) ? param.data.foo : '';
    console.log(param1);
}

答案 3 :(得分:0)

更多地了解它,我得到了这个工作:

function printParam(event,data) //function to be called normally and as event callback
{
    if (event){
        data = (event.data.foo) ? event.data.foo : data;
    }
    console.log("%O",data);
}

可以通过以下方式调用printParam()

printParam(false,"bar");

摆弄它here