代码之家  ›  专栏  ›  技术社区  ›  murvinlai

JQuery:如何编写一个插件函数,将函数名作为字符串并运行它?

  •  3
  • murvinlai  · 技术社区  · 14 年前

    我面临着一个挑战,不知道如何在jQuery中解决这个问题。

    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”的不同位置,并用这个具有不同函数名的代码块替换。那不好。

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

    知道吗?谢谢。

    1 回复  |  直到 14 年前
        1
  •  1
  •   VoteyDisciple    14 年前

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

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