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

Javascript 将参数传递给jquery回调,但也在外部使用回调,javascript,jquery,google-chrome,Javascript,Jquery,Google Chrome,根据SO上的各种帖子,您可以将参数传递给JSON对象内的jQuery回调函数,如下所示: $("myButton").on("click",{foo:"bar"},runStuff); 这很酷,但是如果我还需要runStuff来处理正常的上下文呢?我正在努力解决这个问题: 假设我的回调函数只打印其参数: function printParam(param) { console.log(param); } 这个函数应该像这样正常调用:printParam(“嘿!”)但也通过事件: $(

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

$("myButton").on("click",{foo:"bar"},runStuff);
这很酷,但是如果我还需要
runStuff
来处理正常的上下文呢?我正在努力解决这个问题:

假设我的回调函数只打印其参数:

function printParam(param)
{
    console.log(param);
}
这个函数应该像这样正常调用:
printParam(“嘿!”)但也通过事件:

$("body").on("DOMNodeInserted",{foo: "Hey!"},printParam);
我试图实现如下
printParam

function printParam(param)
{
    param = (event.data.foo) ? event.data.foo : param;
    console.log(param);
}
但这当然不起作用,因为
事件
未定义。我的选择是什么?

试试看

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

这应该是你想要的

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

再搞一点,我就有办法了:

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");

摆弄它。

当使用
.on()
数据
参数时,数据不会直接传递到回调,而是传递到函数的事件对象的
数据
属性中

例如:

$("myButton").on("click",{foo:"bar"},runStuff);
function runStuff(event) {
  console.log(event.data.foo);
}
因此,您可以使用以下命令调用
runStuff

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