采用用户方法的jQuery插件

时间:2009-10-18 19:40:07

标签: jquery plugins methods

我正在开发一个jQuery插件,我希望用户在标志(在代码中)设置为true后传入一个方法名称来执行。我已经根据需要使用了标志,我只需要一种方法来执行传递的方法。 例如:

(function(jQuery){
  $.fn.extend({  
   pluginName: function(options) {
   var defaults = {
    parameter1: 0,
    method: function(){}
   }    
   var options =  $.extend(defaults, options);

      return this.each(function() {
    var opt = options;
    var flag = false;
    if(opt.parameter1 > 0){
     flag = true;
    }
    if(flag){
    //call users method
    }
                jQuery(this).hide();


      });//END return
     }//END counter method
 });//END extend 
        })//END function
        //Return jQuery object
        (jQuery);

用户会这样称呼它:

$("#divName").pluginName({
    parameter1: 1,
    method: function(){alert("test");}
});

我还没有测试过上面的代码,它只是一个插图,所以你可以看到我想要完成的任务。 提前谢谢!

3 个答案:

答案 0 :(得分:4)

由于函数是JavaScript中的第一类对象,因此您只需使用

即可
options.method();

在你的插件中执行函数

答案 1 :(得分:1)

用户提供的方法(例如您的示例)与任何其他方法之间没有区别。因此,您可以像调用任何其他方法一样调用它。

例如:

if (flag)
   opt.method();

如果方法接受参数,则可以按照将参数传递给普通方法的方式传递它们。

答案 2 :(得分:1)

这个评论与你的问题没有关系,但我认为值得注意的是帮助你更多地了解jQuery和JS。

您的代码目前为:

(function(jQuery) {
  $.fn.extend({
    /* ... */
  });
})(jQuery);

以这种方式使用jQuery时创建匿名函数的原因之一是,您可以引用$对象而不会与其他Javascript库冲突。但是,您在匿名函数中接受名为jQuery的参数,然后继续拨打$.fn.extend而不是jQuery.fn.extend

如果您计划在代码中将jQuery对象引用为$,我建议您在匿名函数中将参数名称更正为$,即:

(function($) {
  $.fn.extend({
    /* ... */
  });
})(jQuery);