2009-10-18 79 views
0

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

(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");} 
}); 

我没有测试上面的代码,它只是一个例证,所以你可以看到什么,我试图完成。 在此先感谢!

+0

我觉得你的意思开始与插件'(函数($){...'而不是'(函数(jQuery){...'以便您可以使用'$'简写来引用函数 – 2009-10-18 19:52:17

回答

1

有喜欢你的例子,任何一个用户提供的方法没有什么区别其他方法。因此,您可以像调用其他方法一样调用它。

例如:

if (flag) 
    opt.method(); 

如果方法带有参数,你可以通过它们,你将参数传递给普通的方法一样。

4

因为函数是JavaScript中的第一类对象,你可以使用

options.method(); 

在你的插件执行功能

1

此评论与您的​​问题没有关系,但我认为值得注意的是可以帮助您更全面地了解jQuery和JS。

您的代码当前读取:

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

其中一个原因,以这种方式使用jQuery的时候创建一个匿名的功能是让你可以参考$对象,而与其他JavaScript库冲突。但是,您接受名称为jQuery的参数到您的匿名函数中,然后继续拨打$.fn.extend而不是jQuery.fn.extend

如果您打算引用jQuery对象为你的代码$,我建议在匿名函数,可以矫正你的参数名称$,即:

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

中的jQuery对象)查看注释在这个问题上:) – 2009-10-18 20:08:24

+0

感谢您指出,我打算使用jQuery名称空间来避免与其他库冲突;我忘了用“jQuery”替换所有“$”。 – Wilkins 2009-10-18 21:08:50