Versão atual:

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.

Versão (1):

Ver a versão formatada

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

Comentário

new question