2010-10-30 24 views
3

我面臨一個挑戰,不知道如何在jQuery中解決這個問題。JQuery:如何編寫一個插件函數,它將函數名稱作爲字符串並運行它?

我的目的是寫一個擴展函數來替換Facebook的callSWF函數。

Facebook callSWF run like that: **domObj.callSWF("myFunctionName", param1, param2 ... paramx);** 

現在,我需要替換該功能。 jQuery的,我可以通過JS調用Flash這樣的:

if($('#swfObj')[0]) 
{ 
    $('#swfObj')[0].myFunctionName(param1, param2 ...); 
} 
else 
{ 
    $('#swfObj').myFunctionName(param1,param2 ...); 
} 

然而,這意味着我必須要改變了50+不同的地方,以前叫「callSWF」,並用這個代碼塊具有不同的功能名稱替換。那不好。

所以,我決定寫一個擴展名。理想情況下,我可以這樣打電話:

$('#swfObj')。callSWF(「myFunctionName」,param1,param2 ...);

我開始寫的功能和卡....這裏是到目前爲止我的代碼:

(function($){ 
    $.fn.callSWF = function(swfFuncName, param1) { 

if($(this)[0]) 
{ 
    $(this)[0].**swfFuncName**(param1); 
} 
else 
{ 
    $(this).**swfFuncName**(param1); 
} 

return this; 
    }; 
})(jQuery); 

,我不知道該怎麼辦是...的部分dynamicially傳中,函數名稱(這是swf函數名稱)。因此,swfFuncName將根據我要與之通信的閃光燈功能而有所不同。

e.g我能做到這一點:

**$('#swfObj').callSWF("showMyName", 'whatever');** 
**$('#swfObj').callSWF("anotherFunction", 1234);** 
**$('#swfObj').callSWF("yetAnotherFunction", 'kbieure');** 

什麼想法?謝謝。

回答

1

的關鍵是簡單地使用什麼最稱之爲「陣列」語法而不是「對象」語法來引用的$(this)[0]$(this)相應的屬性(視情況而定)

if($(this)[0]) 
{ 
    $(this)[0][swfFuncName](param1); 
} 
else 
{ 
    $(this)[swfFuncName](param1); 
} 
+0

樣,如果什麼參數數量是多少?例如某些功能可能有一個,有些可能有多個... – murvinlai 2010-10-30 02:30:06

+0

它的工作原理。我只需要找出更好的方法來處理多個參數。 :) – murvinlai 2010-10-30 09:26:46

+0

來處理多個參數,請嘗試:'var elem $(this); = elem [swfFuncName] .apply(elem,[param1,param2,param3]);'閱讀[apply](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply) – Anurag 2010-10-30 19:31:37

相關問題