【问题标题】:jQuery - Create public method that uses configured optionsjQuery - 创建使用配置选项的公共方法
【发布时间】:2012-06-22 23:53:21
【问题描述】:

我正在尝试创建一个使用选项的基本插件,然后创建一个使用设置选项的对象的方法。

 $.sn_Watermark = $.sn_Watermark || {
        options: {
            waterMarkText: "Watermark Text",
            className: "watermarked"
        },
        show: function(selector) {
            $(selector)
                .addClass("watermarked")
                .val("Watermark Text");
        }
    };  

   $.fn.sn_Watermark = $.fn.sn_Watermark || function (options) {
            if(options == null)
                options = $.sn_Watermark.options;
            else
                options = $.extend($.sn_Watermark.options, options);

            return this.each(function () {
                $tb = $(this);
                    if ($tb.val() == "" || $tb.val() == options.waterMarkText ) {
                        $tb.addClass(options.className);
                        $tb.val(options.waterMarkText);
                    }
                }).focus(function () {
                    $tb = $(this);
                    if ($tb.val() == options.waterMarkText) {
                        $tb.val("");
                        $tb.removeClass(options.className);
                    }
                }).blur(function () {
                //var clearLnk = "[LnkClearRowNum=" + $tb.attr('TextBoxRowNum') + "]";
                if ($tb.val() == '') {
                    // $(clearLnk).hide();
                    $tb.addClass(options.className);
                    $tb.val(options.waterMarkText);
                }
                else if ($tb.val() == options.waterMarkText){ //if user types in water mark text
                    $tb.addClass(options.className);
                }
                else {
                    //$(clearLnk).show();
                    $tb.removeClass(options.className);
                }
            });
        };

    $(document).ready(function () {
      $("[TextBoxRowNum]").sn_Watermark({waterMarkText: "My Text"} );
      $.sn_Watermark.show("[TextBoxRowNum]");
   });

所以当我调用 show 时,它使用“硬编码”默认值。 我试图做这样的事情,但没有任何运气。

 $.sn_Watermark = $.sn_Watermark || {
        options: {
            waterMarkText: "Watermark Text",
            className: "watermarked"
        },
        show: function(selector) {
            $(selector)
                .addClass(options.waterMarkTest)
                .val(options.className);
        }
    };

所以我的问题是,有没有一种简单的方法可以在 show 方法中传递选项?

【问题讨论】:

    标签: jquery jquery-plugins options public-method


    【解决方案1】:

    我认为没有理由创建外部方法来通过扩展应用这些选项。

    为什么不尝试将选项放在插件函数中,然后扩展它们?

    【讨论】:

      【解决方案2】:
      $.sn_Watermark = $.sn_Watermark || {
          options: {
              waterMarkText: "Watermark Text",
              className: "watermarked"
          },
          show: function(selector) {
              $(selector)
                  .addClass($.sn_Watermark.options.className)
                  .val($.sn_Watermark.options.waterMarkText);
          }
      };
      

      知道了。让它称它为自己。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-17
        • 2011-12-06
        • 2011-08-03
        • 1970-01-01
        • 2013-08-08
        • 1970-01-01
        • 2011-04-15
        相关资源
        最近更新 更多