A introdução ao Parsley é suficiente para formulários relativamente reduzidos ou sem necessidade de muita personalização. Para formulários mais complexos pode ser necessária a aplicação de validações personalizadas, eventos ou a alteração das opções.

Neste post apresentamos validações personalizadas, como utilizar os eventos disponibilizados pelo Parsley e como submeter um formulário por AJAX, que seja validado com o Parsley.

Vamos começar por submeter um formulário via AJAX, uma vez que o Parsley já necessita da inclusão do jQuery.

$(document).ready(function() {
    $("form[name=myForm]").parsley();

    $("form[name=myForm]").on('submit', function(e) {
        var f = $(this);
        f.parsley().validate();

        if (f.parsley().isValid()) {
            alert('O formulário é válido');
            $.ajax({
                url: f.attr('action'),
                data: f.serialize(),
                type: 'post',
                dataType: 'json',
                success: function(response) {
                    alert('O formulário foi submetido com sucesso');
                },
                error: function() {
                    alert('Ocorreu um erro ao submeter o formulário');
                }
            });
        } else {
            alert('O formulário não é válido');
        }

        e.preventDefault();
    });
});

Como apresentado, é obrigatório aplicar o parsley ao formulário através de $("form[name=myForm]").parsley();. Depois é necessário associar o evento submit do formulário, de forma a ser possível controlar o processo de submissão.

Dentro do evento submit é feita a validação do formulário pelo Parsley através do código $(this).parsley().validate();. Automaticamente é feita a validação de acordo com os atributos de cada input e são apresentadas as mensagens de erro, caso existam. Depois deste processo, é necessário saber se a validação teve um resultado positivo e, em caso afirmativo, submeter o formulário por AJAX.

A verificação de sucesso na validação é feita com o código $(this).parsley().isValid(), que devolve true caso o formulário seja válido ou false caso contrário. Esta notação é usada a partir do Parsley 2.x, na versão 1.x a notação era um pouco diferente.

Na minha opinião, a submissão de formulários por AJAX é preferível porque, além de ser mais rápida (evitando reloads desnecessários) também deixa de existir a preocupação de voltar a colocar os valores nos campos, caso a submissão não tenha sucesso.

Uma opção importante do Parsley é a possibilidade de usar validações personalizadas. Talvez o melhor exemplo para este tipo de situações seja um formulário de registo, onde é necessário garantir que o nome de utilizador de quem se está a registar ainda não existe na base de dados. Nestas situações é possível recorrer às validações personalizadas do Parsley

É possível adicionar as validações personalizadas ao Parsley antes ou depois da biblioteca ser incluída. Para o propósito destes exemplos vamos aplicar as validações depois do plugin ser incluído.

See the Pen Parsley 2.0 - Registry form by Luís Cruz (@milz) on CodePen.

A validação é adicionada através de Javascript, usando window.ParsleyValidator.addValidator('customValidation', function(value, requirement)). Para aplicar a validação ao input, deve usar-se o atributo data-parsley-customValidation (como se pode ver no campo username do formulário).

Neste caso, a validação faz um pedido AJAX onde é enviado o campo username via $_GET. No servidor deve ser verificada a existência do valor na base de dados e, caso exista, devolver uma resposta com o código HTTP 404 (na verdade, qualquer código começado por 4 funciona). Caso o nome de utilizador não exista (e, consequentemente, o campo é válido), deve ser enviada uma resposta com o código HTTP 200.

O closure passado para o addValidator recebe os parâmetros value e requirement. O value é o valor introduzido no input. O requirement (não usado no exemplo) serve para passar outro valor para a validação. Na documentação é apresentado um exemplo em que o valor deve ser múltiplo de um outro valor (3, no caso da documentação).

Para fazer uso do requirement é necessário atribuir um valor ao atributo do input. Algo como data-parsley-something='1234'. Por vezes pode ser conveniente ter acesso a outros inputs dentro da validação e podemos fazê-lo através do requirement, passando o identificador do input. Com este código data-parsley-something='input[name=email]' podemos aceder ao campo email, na validação, através de jQuery.

Se procuras uma introdução ao Parsley.js lê o artigo com a introdução ao Parsley.js.