Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.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 - Fatal编程技术网

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

Javascript 如何在jquery插件中将选项扩展为全局选项,javascript,jquery,Javascript,Jquery,我正在尝试制作一个jquery插件。这是一个验证插件。表单提交后,我想用ajax发送数据。我创建了一个验证构造函数并通过原型继承它。但是我不能在jquery名称空间之外使用默认值 我想使用ops变量作为全局变量,因为我可以从javascript原型访问它。所以,我需要一个有效的方法来做到这一点 (function($){ $.fn.validation = function(options){ var ops = $.extend({}, $.fn.valid

我正在尝试制作一个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
                });
    }

};

您只需在
文档.ready
函数外部声明
ops
,将其保留在
全局范围内
,然后在
文档.ready
函数中启动它,这是一些
局部范围
,因此现在您可以在任何
局部范围
中使用
ops

注意:小心,
ops
将始终声明,但并不总是启动。如果尚未调用
document.ready
函数,则
ops
将是
未定义的

// Global scope
var ops;

(function($){
  $.fn.validation = function(options){
    /// Local scope
    ops = $.extend({}, $.fn.validation.defaults, options);   
  };
}

在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));

谢谢你的回答。我已经更新了源代码,只返回所需的属性,而不是返回对象本身,因为这很危险。例如,如果你从插件外部错误地更新了ops属性,那么options属性将被损坏。我使用全局作为:ops=$.extend({},$.fn.validation.defaults,options);这里ops是一个对象,您声明为$.obj。它们之间的基本区别是什么?因为ops是全局范围的,所以ops也容易在插件之外发生变化。这是个坏习惯。如果您只是在插件内定义ops并返回其值,那么ops值只能在插件初始化时更新,而不能在插件初始化后更新。这将使您的插件保持稳定,避免污染脚本的全局范围,我在$object下创建了一个属性,它是一个jquery对象。最好在其各自的范围内定义to属性,而不是在全局范围内声明。