Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
采用用户方法的jQuery插件_Jquery_Plugins_Methods - Fatal编程技术网

采用用户方法的jQuery插件

采用用户方法的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

我正在开发一个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);
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”。