【问题标题】:JQuery: how to write a plugin function that will take a function name as string and run it?JQuery:如何编写一个将函数名作为字符串并运行它的插件函数?
【发布时间】:2010-10-30 02:18:57
【问题描述】:

我面临一个挑战,不知道如何在 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 ...);
 }

但是,这意味着我必须更改之前调用“callSWF”的 50 多个不同的地方,并用这个具有不同函数名称的代码块替换。这不好。

所以,我决定写一个扩展。理想情况下,我可以这样调用:

$('#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 );

我不知道该怎么做的部分是...动态传入函数名(即 swf 函数名)。因此,swfFuncName 将根据我要与之通信的 flash 函数而有所不同。

例如我可以这样做:

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

有什么想法吗?谢谢。

【问题讨论】:

    标签: jquery function dynamic


    【解决方案1】:

    关键是简单地使用大多数人所说的“数组”语法而不是“对象”语法来引用$(this)[0]$(this)的适当属性(视情况而定)

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

    【讨论】:

    • 如果参数个数不同怎么办?例如,有些功能可能有一个,有些可能有多个......
    • 它有效。我只需要找出一种更好的方法来处理多个参数。 :)
    • 处理多个参数,尝试:var elem $(this); = elem[swfFuncName].apply(elem, [param1, param2, param3]);阅读apply
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    相关资源
    最近更新 更多