Método auxiliar form submit

by gsguma

JavaScript

/**
 * Metodo auxiliar para processar envio de formularios
 * 
 * Exemplo de chamada: $('#idForm').submitForm('#divMensagem', '#divAguarde');
 *
 * @param  elMessage  Identificador do elemento para mostrar a mensagem do resultado            [formato: '#idElemento' ou '.idElemento']
 * @param  elLoading  Identificador do elemento para mostrar enquanto processa o envio do form  [formato: '#idElemento' ou '.idElemento']
 *
 * @return $this      retorna o proprio obj
 */
$.fn.formSubmit = function(elMessage, elLoading) {
    var form      = $(this);
    var elMessage = $(elMessage);
    var elLoading = $(elLoading);
    var params    = form.serialize();
    var action    = form.attr('action');
    var method    = form.attr('method');
    
    event.preventDefault();

    $.ajax({
        cache      : false,
        dataType   : 'json',
        type       : method,
        url        : action,
        data       : params,           
        beforeSend : function() {
            elLoading.show();
            $('input[type=submit]', form).attr('disabled', true);
        },           
        complete   : function() {
            elLoading.hide();
            $('input[type=submit]', form).attr('disabled', false);
        },           
        success    : function(data) {
            if (data.error === true) 
            {
                elMessage.html(data.message);
                var elm = $('input[name=' +data.element+ ']').exists() ? $('input[name=' +data.element+ ']') : $('textarea[name=' +data.element+ ']'); 
                    elm = elm.exists() ? elm : $('select[name=' +data.element+ ']');
                    elm.focus();
            }
            else if (data.error === false) 
            {
                elMessage.html(data.error);
                form.resetForm();                    
            }
            else 
            {
                elMessage.html('Ops! Ocorreu um problema com o script');
            }
        }            
    }); 

   ...