采用用户方法的jQuery插件
我正在开发一个jQuery插件,我希望用户传入一个方法名,在标记(代码中)设置为true后执行。我已经有了需要的标志,我只需要一种方法来执行传递的方法。 例如:采用用户方法的jQuery插件,jquery,plugins,methods,Jquery,Plugins,Methods,我正在开发一个jQuery插件,我希望用户传入一个方法名,在标记(代码中)设置为true后执行。我已经有了需要的标志,我只需要一种方法来执行传递的方法。 例如: (function(jQuery){ $.fn.extend({ pluginName: function(options) { var defaults = { parameter1: 0, method: function(){} } var options = $.exte
(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);
if (flag)
opt.method();
用户会这样称呼它:
$("#divName").pluginName({
parameter1: 1,
method: function(){alert("test");}
});
我还没有测试上面的代码,它只是一个示例,您可以看到我试图实现的目标。
提前谢谢 因为函数是JavaScript中的第一类对象,所以您可以使用
options.method();
在您的插件中执行函数,因为函数是JavaScript中的第一类对象,所以您只需使用
options.method();
在执行函数的插件中用户提供的方法(如示例)与任何其他方法之间没有区别。因此,可以像调用任何其他方法一样调用它 例如:
(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);
if (flag)
opt.method();
如果该方法采用参数,则可以像向普通方法传递参数一样传递参数。用户提供的方法(如示例)与任何其他方法之间没有区别。因此,可以像调用任何其他方法一样调用它 例如:
(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);
if (flag)
opt.method();
如果该方法接受参数,您可以像将参数传递给普通方法一样传递参数。此评论与您的问题无关,但我认为值得注意的是,它可以帮助您了解jQuery和JS的更多信息 您的代码当前为:
(function(jQuery) {
$.fn.extend({
/* ... */
});
})(jQuery);
以这种方式使用jQuery时创建匿名函数的原因之一是,您可以引用$
对象,而不会与其他Javascript库发生冲突。但是,您正在将名为jQuery
的参数接受到匿名函数中,然后继续调用$.fn.extend
,而不是jQuery.fn.extend
如果您计划在代码中将jQuery对象引用为$
,我建议您在匿名函数中将参数名更正为$
,即:
(function($) {
$.fn.extend({
/* ... */
});
})(jQuery);
这条评论与您的问题无关,但我认为它有助于您进一步了解jQuery和JS 您的代码当前为:
(function(jQuery) {
$.fn.extend({
/* ... */
});
})(jQuery);
以这种方式使用jQuery时创建匿名函数的原因之一是,您可以引用$
对象,而不会与其他Javascript库发生冲突。但是,您正在将名为jQuery
的参数接受到匿名函数中,然后继续调用$.fn.extend
,而不是jQuery.fn.extend
如果您计划在代码中将jQuery对象引用为$
,我建议您在匿名函数中将参数名更正为$
,即:
(function($) {
$.fn.extend({
/* ... */
});
})(jQuery);
我想你是想用
(function($){…
而不是(function(jQuery){…
来启动插件,这样你就可以使用$
速记来引用函数中的jQuery对象。我想你是想用(function($){…
而不是(function(jQuery))来启动插件{…
这样您就可以使用$
速记来引用函数中的jQuery对象。请看一下关于这个问题的注释:)感谢您指出这一点。我打算使用jQuery命名空间来避免与其他库发生冲突;我忘了将所有“$”替换为“jQuery”。请看一下关于这个问题的评论:)感谢您指出这一点。我打算使用jQuery命名空间以避免与其他库发生冲突;我忘了将所有“$”替换为“jQuery”。