2014-03-31 4 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

При использовании параметра .on()data, данные не передаются directy к функции обратного вызова, но в data свойства объекта Event, который передается в функцию.

Пример:

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

Таким образом, вы могли бы назвать runStuff с:

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

Try ths;

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() может быть вызван следующим образом:

printParam(false,"bar"); 

повозился с ним here.

Смежные вопросы