2014-03-31 15 views
0

據對SO各個崗位和this groovy example你可以傳遞參數給一個jQuery回調函數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是未定義的。我在這裏有什麼選擇?

回答

1

當使用data參數.on()時,數據不直接傳遞給回調函數,而是傳遞給該函數的Event對象的data屬性。

例子:

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

所以,你可以調用runStuff有:

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

試試看;

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

這應該做你想做的。

function printParam(param) 
{ 
    param = (param.data) ? param.data.foo : param; 
    console.log(param); 
} 
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()可以通過這種方式調用:撥弄着它here

printParam(false,"bar"); 

相關問題