未捕获的TypeError:无法读取未定义的属性“值”

时间:2011-07-01 16:43:32

标签: javascript typeerror

我有一些JavaScript代码可以提供此错误

Uncaught TypeError: Cannot read property 'value' of undefined

代码

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'; }

这个错误是什么意思?

7 个答案:

答案 0 :(得分:32)

看起来像你的一个值,属性键'value'未定义。在执行if语句之前测试i1i2__i的定义:

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'; }
}

答案 1 :(得分:10)

document.getElementById('i1')document.getElementById('i2')document.getElementsByName("username")[0]未返回任何元素。检查所有元素是否存在。

答案 2 :(得分:8)

试试这个,它总是有效,你将得到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
    }
}

答案 3 :(得分:6)

首先,您应该确保document.getElementsByName(“username”)[0]实际返回一个对象而不是“undefined”。你可以简单地检查一下

if (typeof document.getElementsByName("username")[0] != 'undefined')

与其他元素密码类似。

答案 4 :(得分:5)

这里的帖子帮助我找到了解决未捕获的TypeError:无法读取未定义问题的属性“值”的解决方案。

这里已经有很多答案都是正确的,但我们这里没有的是2个答案的组合,我认为这个答案完全可以解决。

function myFunction(field, data){
  if (typeof document.getElementsByName("+field+")[0] != 'undefined'){
  document.getElementsByName("+field+")[0].value=data;
 }
}

区别在于您进行检查(如果已定义属性),如果检查为真,则可以尝试为其分配值。

答案 5 :(得分:0)

您只需创建一个函数来检查变量是否存在,否则将返回默认值:

function isSet(element, defaultVal){

    if(typeof element != 'undefined'){

        return element;

    }

    console.log('one missing element');

    return defaultVal;
}

并在变量检查中使用它:

var variable = isSet(variable, 'Default value');

答案 6 :(得分:0)

您的代码看起来像是从其他代码自动生成的-在处理它们之前,应检查具有id=i1i2以及name=usernamepassword的html元素是否存在。