Em formulários mais complexos pode ser necessário validar um ou mais campos com base nas opções de um outro campo. Por exemplo, tornar o campo A obrigatório quando a opção X está selecionada e tornar o campo B obrigatório quando a opção Y está selecionada.

Para fazermos este tipo de validação condicional podemos usar o ParsleyJs em conjunto com Javascript.

Vamos começar por um exemplo simples, num formulário que tem quatro campos, o primeiro que é o campo de controlo e os restantes campos de texto.

<form id="test_form">
   Control Field:
       <input type="radio" id="control_field_1" name="control_field" value="first_option" required checked />
           <label for="control_field_1">First Option</label>
       <input type="radio" id="control_field_2" name="control_field" value="second_option" required>
           <label for="control_field_2" />Second Option</label>
   <br><br />

   Field 1 (required only for the "First Option"): <input type="text" name="field_1" required /> 
   <br />
   Field 2 (required only for the "Second Option"): <input type="text" name="field_2"/> 
   <br />
   Field 3 (required for all options): <input type="text" name="field_3" required/>
   <input type="submit" value="Submit form"></input>
</form>

Neste formulário, quando for selecionada o radio “First Option” vamos definir o Field 1 e o Field 3 como campos obrigatórios. E, quando selecionarmos o radio “Second Option” vamos colocar os campos Field 2 e Field 3 obrigatórios.

Desta forma, os campos obrigatórios vão ser alterados mediante a opção que for selecionada no Control Field.

Primeiro temos de instanciar o ParsleyJs para o nosso formulário com $(“form”).parsley();. Depois de termos o Parsley “ligado” ao formulário, temos de criar algum código para verificar qual a opção que o utilizador seleciona e, de acordo com essa opção, tornar os campos obrigatórios ou remover a obrigatoriedade.

Para isto vamos usar o método .on(‘change’, function() {..}) do jQuery que nos permite detetar uma mudança de seleção do campo de controlo e colocaremos todo o código aí. Este código passa por verificar qual a opção selecionada e usar .attr(“required”, “required”) para tornar um campo obrigatório e .removeAttr(“required”) para remover o atributo.

$("form").parsley();

$("[name=control_field]").on('change', function () {
    // Qual foi a opção selecionada?
    var val = $(this).val();

    switch (val) {
        // Se o utilizador selecionou o "first_option"
        case 'first_option':
            // Adicionar o atributo required no field_1
            $("[name=field_1]").attr("required", "required");
            // e remover o atributo required no field_2
            $("[name=field_2]").removeAttr("required");
            break;
        // Se foi o "second_option" selecionado
        case 'second_option':
            // Invertemos o que fizemos para o "first_option"
            $("[name=field_1]").removeAttr("required");
            $("[name=field_2]").attr("required", "required");
            break;
    }
    
    // Reset ao formulário, para que seja aplicada a validação
    // com os atributos revistos. 
    $("form").parsley().reset();
});

Como se pode ver acima, não basta alterar os atributos required para que o Parsley passe a validar os campos de acordo com as novas definições. Sempre que alteres alguma regra de validação, como aqui estamos a fazer, tens de fazer reset à instância do Parlsey para este formulário através de:

$("form").parsley().reset();

E já está! Podes ver a demonstração abaixo. Se quiseres saber mais sobre o Parsley basta clicares na tag “parsleyjs”, no final do artigo.

See the Pen Conditional validation with Parsley Js by Luís Cruz (@milz) on CodePen.