2010-12-08 154 views
0

尝试传递函数名称作为变量,以便在函数中调用它,但无法弄清楚如何调用它。函数回调函数作为变量

任何帮助欢迎!

jQuery.fn.makeSlideShow = function(opts) { 

    opts = jQuery.extend({ 
     speed  :400, 
     delay  :0, 
     slideCLass :'.slide', 
     pager  :'#pager', 
     next  :'.nextSlide', 
     previous :'.previousSlide', 
     startSlide :0, 
     screenClick :false, 
     callback:function(){return false;} 
    },opts||{}); 

    // callback the fullscreenImage function here? 

}; 



$('#slideShow').makeSlideShow({ 
    callback : 'fullscreenImage' 
}); 

function fullscreenImage(){ 
    alert('called!'); 
} 

最好,丹。

回答

1

你传递一个字符串到您的插件。你需要通过function reference

$('#slideShow').makeSlideShow({ 
    callback : fullscreenImage 
}); 

在你的插件代码,你需要调用该函数。这可以通过几种方式来完成:

opts.callback(); // default call 
opts.callback.call(scope, param1, param2, ...); // invoke makeSlideShow with a specific context and arguments 
opts.callback.apply(scope, [param1, param2, ...]); // invoke makeSlideShow with a specific context and arguments as array 
+0

王牌 - 干杯!只是为了将来的ref如何将params通过makeSlideShow()传递给回调函数? – v3nt 2010-12-08 15:43:18

0

如果传递一个字符串,您需要知道函数所在的作用域。

window[ opts.callback ]() 

window[ opts.callback ].call(this) 

这些假设的功能是全球性的。

要求传递函数的引用而不是字符串会更好。

$('#slideShow').makeSlideShow({ 
    callback : fullscreenImage 
}); 

function fullscreenImage(){ 
    alert('called!'); 
} 

然后,你会怎么做:

opts.callback() 

opts.callback.call(this) 
1

你或许应该通过描述的功能标识,而不是它的名称的字符串。于是关掉这个:

$('#slideShow').makeSlideShow({ 
    callback : 'fullscreenImage' 
}); 

这样:

$('#slideShow').makeSlideShow({ 
    callback : fullscreenImage 
}); 
+1

请评论downvotes所以错误或遗漏的细节可以纠正。 Downvotes没有明显的原因是愚蠢的。 – Jakob 2010-12-08 15:06:44

0

您可以进行如下设置 'callbeck' 欢迎使用属性:

$('#slideShow').makeSlideShow({ 
    callback : fullscreenImage 
}); 

比你可以这样调用:

... 
callback() 
...