【发布时间】:2013-07-16 19:10:48
【问题描述】:
显然我的脚本是正确的,有人可以帮我解决这个问题吗?当我看到控制台时,它会显示消息Cannot call method 'toString' of undefined。
会不会是 ID 选择器有问题?我可以只使用一个函数,而不是使用一个用于验证,另一个用于运行我的函数吗?
/* ==== CPF Validator ==== */
function validar_cpf(cpf)
{
regex = /\./g;
cpf = cpf.toString().replace(regex,'');
cpf_split = cpf.split('-');
numero = cpf_split[0];
dv = cpf_split[1];
numero_init = numero.toString() + dv.toString();
if(numero_init.length < 11)
return false
var somatorio = 0;
for(i = 10, n = 0; i >= 2 ; i--, n++){
m = numero.charAt(n) * i;
somatorio += m;
}
dv1 = somatorio / 11;
dv1 = parseInt(dv1);
resto = somatorio % 11;
if(resto < 2)
dv1 = 0;
else
dv1 = Math.abs(11 - resto);
numero += dv1.toString();
somatorio = 0;
for(i = 11, n= 0; i >= 2 ; i--, n++ ){
m = numero.charAt(n) * i;
somatorio += m;
}
resto = somatorio % 11;
if(resto < 2)
dv2 = 0;
else
dv2 = 11 - resto;
numero += dv2.toString();
if(numero == numero_init)
return true;
else
return false;
}
function ValidaCpf()
{
if (validar_cpf(cpf))
{
document.getElementById('first-cpf').classList.add('hide');
document.getElementById('second-cpf').classList.remove('hide');
document.getElementById('cpf').classList.add('form_invalido');
document.getElementById('cpf').classList.remove('form_valido');
}
else {
document.getElementById('first-cpf').classList.remove('hide');
document.getElementById('second-cpf').classList.add('hide');
document.getElementById('cpf').classList.remove('form_invalido');
document.getElementById('cpf').classList.add('form_valido');
}
}
【问题讨论】:
-
cpf是在哪里定义的? -
undefined.toString()是错了。因此,找出为什么存在未定义与“预期”值的原因。 1) 调用函数时,cpf 绑定为 undefined,或者; 2)拆分只返回一个结果,如果缺少分隔符,这是可能的。 -
控制台在哪一行显示错误正在发生?
-
就行 numero_init = numero.toString() + dv.toString();
-
如果该行出错,很可能是“dv”未定义,这意味着分隔符不存在于cpf中。
标签: javascript html dom frontend