代码之家  ›  专栏  ›  技术社区  ›  Griff

为什么我的JQuery插件没有得到它自己的实例?

  •  1
  • Griff  · 技术社区  · 14 年前

    我有一个JQuery 1.4.2插件,它使用一组选项。伪代码是这样的:

     (function($) {
      // Shell for the plugin code
      $.fn.myPlugIn = function(options) {
        // Plugin code
        return this.each(function() {
          // for each item in selector
          options = $.extend($.fn.myPlugIn.defaults, options);
          ...do stuff
        });
        $.fn.myPlugIn.defaults = {
        header      :   null,
        position    :   'absolute',
        top         :   null,
        left        :   null,
        forinput    :   null,
        forAnchor   :   null,
        sAjaxSource :   null,
        onClick     :   null
      };
      })(jQuery);
    

    当为单个页面上的多个元素调用插件时,选项不是唯一的——前面的元素选项仍在选项中。

    $(document).ready(function() {
        $("#div1").myPlugIn(
                {forinput: "input1",
                 onClick: function(data){
                    ... do stuff
                },
        });
        $("#div2").myPlugIn({
              forAnchor: "link1",
                onClick: function(data){
                    ... do stuff
                 },
            header: "Parts"
        });
    
    });
    

    我做错什么了?我希望每次找到插件时,它都会使用传递给它的选项。相反,它使用保留来自第一个实例的所有选项,并覆盖来自第二个实例的任何重新初始化的属性。

    欢迎回复。提前谢谢你看我的帖子。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Nick Craver    14 年前

    您需要将选项合并到 新的 对象,例如:

    options = $.extend({}, $.fn.myPlugIn.defaults, options);
    

    $.extend() $.fn.myPlugIn.defaults 违约,留下它的污染,以供下次使用。相反,您不想弄乱默认值(除非有意在其他地方更改它们),而是将选项和默认值合并到另一个新对象中。

        2
  •  1
  •   mpapis    14 年前