如何在jquery插件中将选项扩展为全局选项

时间:2015-12-23 11:11:53

标签: javascript jquery

我正在尝试制作一个jquery插件。它是一个验证插件。表单提交后,我想用ajax发送数据。我创建了一个验证构造函数并通过原型继承它。但是我不能在jquery命名空间之外使用默认值。

我想使用ops变量作为全局变量,因为我可以从javascript原型访问它。所以,我需要一种有效的方法来做到这一点。

    (function($){
      $.fn.validation = function(options){
        var ops = $.extend({}, $.fn.validation.defaults, options);   
        //wanna make ops as  global as I can access  from prototype
      };
    }(jQuery));

    $.fn.validation.defaults = {
        url: 'validation.php',
        methodType: 'post',
    };

    function Validate(){               // constructor
      this.error = [];
    }

    Validate.prototype = {

        constructor : Validate,

        submitForm : function(currentForm){
            var formData = new FormData(currentForm);
                $.ajax({
                    url: opt.url,                 //  wanna call like that.
                    type: opt.methodType,        
                    //   Don't wanna use  $.fn.validation.defaults.methodType
                    success: function(data){

                    },
                    data: formData,
                    cache: false,
                    contentType: false,
                    processData: false
                });
    }

};

2 个答案:

答案 0 :(得分:2)

在jquery对象ops下定义变量$.ops,并从扩展的jquery函数$.fn.validation.options

返回该对象
(function($){
   $.ops = {};

   $.fn.validation = function(options){
       $.ops = $.extend({}, $.fn.validation.defaults, options);   
      //wanna make ops as  global as I can access  from prototype
   };
   // expose the ops object to outside world
   $.fn.validation.options = function () {
       return this.ops;
   }
}(jQuery));

答案 1 :(得分:1)

您可以在ops函数之外简单地声明document.ready,将其保留在global scope中,然后在document.ready函数中启动local scope函数ops现在,您可以在任何local scope中使用ops

注意:请注意,document.ready将始终声明,但不会始终启动。如果您的ops功能尚未调用undefined,则// Global scope var ops; (function($){ $.fn.validation = function(options){ /// Local scope ops = $.extend({}, $.fn.validation.defaults, options); }; }

Listener