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.