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