Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.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
Javascript 使调用自定义jQuery插件变得更容易_Javascript_Jquery_Plugins_Jquery Plugins - Fatal编程技术网

Javascript 使调用自定义jQuery插件变得更容易

Javascript 使调用自定义jQuery插件变得更容易,javascript,jquery,plugins,jquery-plugins,Javascript,Jquery,Plugins,Jquery Plugins,我编写了一个带有以下“签名”的插件: 这里元素是jQuery对象,设置是我插件的自定义设置,持续时间,选项和回调都是我在jQuery的动画中使用的参数,如下所示: someObject.animate({ someCSS }, duration, options, callback); 现在,我的问题是:有没有可能让这个函数更容易调用?例如,现在,让一切都像我期望的那样工作。。。我必须包括所有参数,并将不使用的参数设置为null: $(this).attach($('#e1-blue'), n

我编写了一个带有以下“签名”的插件:

这里
元素
是jQuery对象,
设置
是我插件的自定义设置,
持续时间
选项
回调
都是我在jQuery的动画中使用的参数,如下所示:

someObject.animate({ someCSS }, duration, options, callback);
现在,我的问题是:有没有可能让这个函数更容易调用?例如,现在,让一切都像我期望的那样工作。。。我必须包括所有参数,并将不使用的参数设置为
null

$(this).attach($('#e1-blue'), null, 3000, null, function() { alert('done'); });
也可以将其称为:

$(this).attach($('#e1-blue'), 3000, function() { alert('done'); });
就像这个(ofc)


有什么建议吗?

我建议您查看方法签名,看看人们如何处理可选参数。例如,查看jQuery.speed后面的设置,这是jQuery.animate使用的-


不管怎样,您只需要查看参数的类型,看看是否有人传入了它们。

我建议您查看方法签名,看看人们如何处理可选参数。例如,查看jQuery.speed后面的设置,这是jQuery.animate使用的-


不管怎样,您只需要查看参数的类型,看看是否有人传入了参数。

我能想到的最简单的事情是对参数重新排序,使最常用的参数排在第一位。因此,如果将函数更改为:

jQuery.fn.attach = function(element, duration, callback, settings, options) {
然后,通过将默认值放入函数体,可以使所有内容(可能第一个参数除外)都成为可选的。例如:

if(!duration)
   duration = 3000;
然后

两者都有效,其他值自动填充为
null


严格地说,您可以检查函数内部的参数类型,例如,如果第二个参数是整数,那么它是
持续时间
,如果它是函数,那么它是
回调
,如果它是对象,那么它是
设置
,但我认为以后必须遵循您的代码的人不会为此感谢您。如果需要第二个整数参数,也可能会使函数稍后难以向下扩展。

我能想到的最简单的事情是对参数重新排序,使最常用的参数排在第一位。因此,如果将函数更改为:

jQuery.fn.attach = function(element, duration, callback, settings, options) {
然后,通过将默认值放入函数体,可以使所有内容(可能第一个参数除外)都成为可选的。例如:

if(!duration)
   duration = 3000;
然后

两者都有效,其他值自动填充为
null


严格地说,您可以检查函数内部的参数类型,例如,如果第二个参数是整数,那么它是
持续时间
,如果它是函数,那么它是
回调
,如果它是对象,那么它是
设置
,但我认为以后必须遵循您的代码的人不会为此感谢您。如果需要第二个整型参数,这也会使函数稍后难以向下扩展。

我设置了一个默认对象,并且在插件函数中只接受一个参数

  $.fn.myPlugin=function(opt){
    var o=$.extend({}, $.fn.myPlugin.defaults, opt||{});
  };
  $.fn.myPlugin.defaults={
    element: null,
    settings: null,
    options: null,
    callback: null,
    duration: 250
  };
实例化插件

$('#myElement').myPlugin({element: $('#el-blue'), duration: 2000})
如果每次都要传递某些内容,则可以将options对象作为第二个参数

  $.fn.myPlugin=function(element, opt){
   return this.each(function(){
    var o=$.extend({}, $.fn.myPlugin.defaults, opt||{});
    //do some stuff
    if (o.callback) {
     o.callback.call(this, o);
    }
   });
  };

$('#myElement').myPlugin($('#el-blue'), {duration: 3000, callback: function(){}});

我设置了一个默认对象,在插件函数中只接受一个参数

  $.fn.myPlugin=function(opt){
    var o=$.extend({}, $.fn.myPlugin.defaults, opt||{});
  };
  $.fn.myPlugin.defaults={
    element: null,
    settings: null,
    options: null,
    callback: null,
    duration: 250
  };
实例化插件

$('#myElement').myPlugin({element: $('#el-blue'), duration: 2000})
如果每次都要传递某些内容,则可以将options对象作为第二个参数

  $.fn.myPlugin=function(element, opt){
   return this.each(function(){
    var o=$.extend({}, $.fn.myPlugin.defaults, opt||{});
    //do some stuff
    if (o.callback) {
     o.callback.call(this, o);
    }
   });
  };

$('#myElement').myPlugin($('#el-blue'), {duration: 3000, callback: function(){}});