class FormAjax { constructor(selector, options) { console.log('Se inicia FormAJAX: '.selector); this.selector = selector; this.options = options; this.init(); } init() { $(this.selector).on('submit', (event) => { event.preventDefault(); var form = $(event.currentTarget); this.form = form; this.event = event; var url = form.attr('action'); var method = form.attr('method'); var serializeData = new FormData(form[0]); this.query_string = this.formDataToQueryString(serializeData); this.preSubmit(); $.ajax({ type: method, data: serializeData, url: url, contentType: false, processData: false }).done((r) => { this.postSubmit(r, this); }).fail((r) => { this.isError(r.responseJSON); }); }); } preSubmit() { status = true; if(this.options.preSubmit !== undefined) { status = this.status(this.options.preSubmit(this)); } if(status) { this.disabled(true); } } postSubmit(r) { status = true; if(this.options.postSubmit !== undefined) { status = this.status(this.options.postSubmit(r, this)); } if(status) { this.disabled(false); } } isError(r) { status = true; if(this.options.isError !== undefined) { this.options.isError(r, this); } if(status) { this.disabled(false); } } disabled(status, except = []) { $.each(this.event.currentTarget, (key, value) => { var element = $(value); if($.inArray(element.attr('name'), except) === -1) { element.attr('disabled', status); } }); } cleanup(except = []) { $.each(this.event.currentTarget, (key, value) => { var element = $(value); if((element.attr('name') === "_token")) { return; } if((element.is('select'))) { return; } if(($.inArray(element.attr('name'), except) === -1)) { return; } element.val(''); }); } status(object) { return object === undefined; } formDataToQueryString(formData) { const params = new URLSearchParams(); for (const [key, value] of formData.entries()) { params.append(key, value); } return params.toString(); } }