Validar CPF e Vínculo familiar (Select/Option) numa tabela Pai x Filho

Bom dia, eu tenho um projeto onde eu tenho uma tabela pai x filho. Nessa tabela, quando é adicionado as linhas, geram 4 campos. Nome, CPF, Vínculo familiar e Dt Nascimento.

O CPF é um input. O vínculo é um select com 4 options.

Usei um validateForm para validar o Nome e a Data de nascimento, percorrendo com o indexes. Tentei fazer o mesmo para o CPF, mas quando uso o cpf_[i] na função validarCPF, sempre me retorna false (mesmo quando o cpf é válido, e a função está testada e retorna true qnd o CPF está ok).

O vinculo_[i] aparentemente não traz o value da option, sempre vem vazio.

Esse é meu código HTML.

<table class="table" border="0" tablename="dependentes" addbuttonlabel="Adicionar dependente" addbuttonclass="btn btn-success">
                                            <thead>
                                                <tr class="tableHeadRow">
                                                    <th class="tableColumn">Nome do dependente</th>
                                                    <th class="tableColumn">CPF</th>
                                                    <th class="tableColumn">Vínculo de dependência</th>
                                                    <th class="tableColumn">Data de nascimento</th>
                                                </tr>
                                            </thead>
                                            <tr>
                                                <div id="filho">
                                                    <td class="col-ms-4">
                                                        <div class="form-group">
                                                            <input type="text" name="nome" id="nome" class="form-control" maxlength="200" />
                                                        </div>
                                                    </td>
                                                    <td class="col-ms-2">
                                                        <div class="form-group">
                                                            <input pattern="^[0-9]{11}$" type="text" name="cpf" id="cpf" class="form-control" maxlength="11" />
                                                        </div>
                                                    </td>
                                                    <td class="col-ms-2">
                                                        <div class="form-group">
                                                            <select name="vinculo" id="vinculo" class="form-control">
                                                                <option value="1" selected>Filho(a) ou Enteado(a)</option>
                                                                <option value="2">Esposo(a)</option>
                                                                <option value="3">Pais, avós e bisavós</option>
                                                                <option value="4">Irmão(ã), neto(a) ou bisneto(a)</option>
                                                            </select>
                                                        </div>
                                                    </td>
                                                    <td class="col-ms-4">
                                                        <div class="form-group" id="data_nascimento">
                                                            <input type="date" name="data_nasc" id="data_nasc" class="form-control" />
                                                        </div>
                                                    </td>
                                                </div>
                                            </tr>
                                        </table>

Esse é meu validate.

function validateForm(form){
    var indexes = form.getChildrenIndexes("dependentes");

    if (indexes.length >= 1){
        for (var i = 0; i < indexes.length; i++){
        //<!-- VALIDAÇÃO DE CAMPO VAZIO -->
            var msgerro = "";
            var nome = form.getValue("nome___" + indexes[i]);
            var dt = form.getValue("data_nasc___" + indexes[i]);
            var c = form.getValue("cpf___" + indexes[i]);
            var d = form.getValue("vinculo___" + indexes[i]);
            var isValid = validaCPF(c);
            var isOk = verificaVinculo(d);

            if (dt == "") {
                msgerro += "Informe a data de nascimento.<br />";
            }
            //<!-- VALIDAÇÃO DE NOME E SOBRENOME -->
            if (nome == "" || (!(nome.match(/^[a-zA-Z\u00C0-\u017F´]+\s+[a-zA-Z\u00C0-\u017F´]{0,}$/) && nome.trim().split(" ").length >= 2))) {
                msgerro += "Nome inválido!<br />";
            }

            if (isValid){
                msgerro += "CPF inválido!<br />";
            }

            if (isOk){
                msgerro += "Vínculo não selecionado!<br />";
            }

            if (msgerro != ""){
                throw (msgerro);
            }

        } //for
    } //if
} //funcao principal

function validaCPF(cpf){
    // Elimina CPFs por tamanho e invalidos conhecidos    
    if (cpf === "") {
        return false;
    }
    if (cpf.length != 11 || 
        cpf == "00000000000" || 
        cpf == "11111111111" || 
        cpf == "22222222222" || 
        cpf == "33333333333" || 
        cpf == "44444444444" || 
        cpf == "55555555555" || 
        cpf == "66666666666" || 
        cpf == "77777777777" || 
        cpf == "88888888888" || 
        cpf == "99999999999") {
        return false;
    }

        var soma = 0;

        for(var i = 0; i < 9; i++){
            soma += cpf.charAt(i) * (10 - i);
        } //for
        soma = (soma * 10) % 11;

        if (soma == 10 || soma == 11){
            soma = 0;
        }

        if (soma != cpf.charAt(9)){
            return false;
        }

        soma = 0;

        for(i = 0; i < 10; i++){
            soma += cpf.charAt(i) * (11 - i);
        } //for
        soma = (soma * 10) % 11;

        if (soma == 10 || soma == 11){
            soma = 0;
        }

        if (soma != cpf.charAt(10)){
            return false;
        }
    return true;   
}

function verificaVinculo(dep){
    if (dep === null || dep === "" || dep === undefined){
        throw ("Selecione um vínculo");
    }
    return true;

}

Alguém teria alguma sugestão de como corrigir ou fazer essa validação do CPF e do Vínculo? Pode ser fora do validateForm. Qualquer ajuda é bem vinda.

compartilhar
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do fluig Forum!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags fluig validateform cpf select paixfilho ou faça a sua própria pergunta.