Javascript类函数
我为jQuery框架编写了一个JS“类”,如下所示:Javascript类函数,javascript,jquery,oop,Javascript,Jquery,Oop,我为jQuery框架编写了一个JS“类”,如下所示: (function($) { $.fn.dynamic = function() { return this.each(function() { $(this).on("submit", function(e) { var form = $(e.target); $.ajax({ type:
(function($) {
$.fn.dynamic = function() {
return this.each(function() {
$(this).on("submit", function(e) {
var form = $(e.target);
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize(),
success : function(data, textStatus, jqXHR) {
// Do something
},
error : function(data, textStatus, jqXHR) {
// Do something
}
});
e.preventDefault();
return false;
});
});
});
})(jQuery);
在“我的成功/错误”功能中,我要执行操作(显示/隐藏自动加载器、显示消息等)
我认为最好的方法是启动一个事件,举个例子:
form.trigger("formSubmitted", [data, true/false]);
然后和一个听众一起做我必须做的事情
是否可以在我的类dynaform中添加一个侦听器,并假设我必须添加到其他类(比如Messages和ProgressOverlay),如何调用这些类的方法以及如何管理错误(假设这些类位于无法加载的其他文件或其他人中)首先,您需要接受函数中的一些参数 为此,需要在存储参数默认值的对象中定义回调:
this.defaultOptions = {
onSuccess: function(data, textStatus, jqXHR) {},
onError: function(data, textStatus, jqXHR) {}
};
然后,您需要将默认选项与要传递的选项合并:
var settings = $.extend({}, this.defaultOptions, options);
然后,当您需要时,调用您的回调:
settings.onSuccess.call(undefined, data, textStatus, jqXHR);
然后你只需要像这样调用你的插件:
$('form').dynamic({
onSuccess: function(data, textStatus, jqXHR){
...
},
onError: function(data, textStatus, jqXHR){
...
}
});
以下是完整的代码:
(function($) {
$.fn.dynamic = function(options) { // Notice the added parameter here
//Here are the defined callbacks
this.defaultOptions = {
onSuccess: function(data, textStatus, jqXHR) {},
onError: function(data, textStatus, jqXHR) {}
};
//Merge your options with the predefined ones
var settings = $.extend({}, this.defaultOptions, options);
return this.each(function() {
$(this).on("submit", function(e) {
var form = $(e.target);
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize(),
success: function(data, textStatus, jqXHR) {
settings.onSuccess.call(undefined, data, textStatus, jqXHR); //Call your onSuccess callback here
},
error: function(data, textStatus, jqXHR) {
settings.onError.call(undefined, data, textStatus, jqXHR); //Call your onError callback here
}
});
e.preventDefault();
return false;
});
});
};
})(jQuery);
首先,您需要接受函数中的一些参数 为此,需要在存储参数默认值的对象中定义回调:
this.defaultOptions = {
onSuccess: function(data, textStatus, jqXHR) {},
onError: function(data, textStatus, jqXHR) {}
};
然后,您需要将默认选项与要传递的选项合并:
var settings = $.extend({}, this.defaultOptions, options);
然后,当您需要时,调用您的回调:
settings.onSuccess.call(undefined, data, textStatus, jqXHR);
然后你只需要像这样调用你的插件:
$('form').dynamic({
onSuccess: function(data, textStatus, jqXHR){
...
},
onError: function(data, textStatus, jqXHR){
...
}
});
以下是完整的代码:
(function($) {
$.fn.dynamic = function(options) { // Notice the added parameter here
//Here are the defined callbacks
this.defaultOptions = {
onSuccess: function(data, textStatus, jqXHR) {},
onError: function(data, textStatus, jqXHR) {}
};
//Merge your options with the predefined ones
var settings = $.extend({}, this.defaultOptions, options);
return this.each(function() {
$(this).on("submit", function(e) {
var form = $(e.target);
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize(),
success: function(data, textStatus, jqXHR) {
settings.onSuccess.call(undefined, data, textStatus, jqXHR); //Call your onSuccess callback here
},
error: function(data, textStatus, jqXHR) {
settings.onError.call(undefined, data, textStatus, jqXHR); //Call your onError callback here
}
});
e.preventDefault();
return false;
});
});
};
})(jQuery);
您应该阅读jQuery插件回调。您应该阅读jQuery插件回调。非常感谢@Zenoo。我第一次想这样做,但我想知道这是否是一个好的做法,似乎是。非常感谢@Zenoo。我第一次想这么做,但我想知道这是否是一个好的做法,似乎是的。