2010-10-30 50 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

相关问题