2010-12-08 128 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() 
...