Javascript类函数

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:

我为jQuery框架编写了一个JS“类”,如下所示:

(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。我第一次想这么做,但我想知道这是否是一个好的做法,似乎是的。