javascript - solucionar - Unkeught TypeError: no se puede leer la propiedad ''valor'' de undefined
undefined javascript error (5)
Tengo un código de JavaScript que da este error
Uncaught TypeError: Cannot read property ''value'' of undefined
Código:
var i1 = document.getElementById(''i1'');
var i2 = document.getElementById(''i2'');
var __i = {''user'' : document.getElementsByName("username")[0], ''pass'' : document.getElementsByName("password")[0] };
if( __i.user.value.length >= 1 ) { i1.value = ''''; } else { i1.value = ''Acc''; }
if( __i.pass.value.length >= 1 ) { i2.value = ''''; } else { i2.value = ''Pwd''; }
¿Qué significa este error?
En primer lugar, debe asegurarse de que document.getElementsByName ("username") [0] realmente devuelva un objeto y no "undefined". Simplemente puede verificar como
if (typeof document.getElementsByName("username")[0] != ''undefined'')
Del mismo modo para la contraseña del otro elemento.
Las publicaciones aquí me ayudan mucho en mi camino para encontrar una solución para el TypeError no detectado: no se puede leer el ''valor'' de propiedad de un problema indefinido .
Ya hay muchas respuestas que son correctas, pero lo que no tenemos aquí es la combinación de 2 respuestas que creo que resuelven este problema por completo.
function myFunction(field, data){
if (typeof document.getElementsByName("+field+")[0] != ''undefined''){
document.getElementsByName("+field+")[0].value=data;
}
}
La diferencia es que realiza un control (si una propiedad está definida o no) y si la verificación es verdadera, entonces puede intentar asignarle un valor.
Parece uno de sus valores, con una clave de propiedad de ''valor'' no definida. Pruebe que i1
, i2
y __i
están definidos antes de ejecutar las sentencias if:
var i1 = document.getElementById(''i1'');
var i2 = document.getElementById(''i2'');
var __i = {''user'' : document.getElementsByName("username")[0], ''pass'' : document.getElementsByName("password")[0] };
if(i1 && i2 && __i.user && __i.pass)
{
if( __i.user.value.length >= 1 ) { i1.value = ''''; } else { i1.value = ''Acc''; }
if( __i.pass.value.length >= 1 ) { i2.value = ''''; } else { i2.value = ''Pwd''; }
}
Prueba esto, siempre funciona, y obtendrás NO TypeError:
try{
var i1 = document.getElementById(''i1'');
var i2 = document.getElementById(''i2'');
var __i = {''user'' : document.getElementsByName("username")[0], ''pass'' : document.getElementsByName("password")[0] };
if( __i.user.value.length >= 1 ) { i1.value = ''''; } else { i1.value = ''Acc''; }
if( __i.pass.value.length >= 1 ) { i2.value = ''''; } else { i2.value = ''Pwd''; }
}catch(e){
if(e){
// If fails, Do something else
}
}
Ya sea document.getElementById(''i1'')
, document.getElementById(''i2'')
o document.getElementsByName("username")[0]
no devuelve ningún elemento. Verifique que todos los elementos existan.