Javascript 未捕获类型错误:无法读取属性';价值';未定义的

Javascript 未捕获类型错误:无法读取属性';价值';未定义的,javascript,typeerror,Javascript,Typeerror,我有一些JavaScript代码给出了这个错误 Uncaught TypeError:无法读取未定义的属性“value” 代码 此错误是什么意思?要么document.getElementById('i1'),document.getElementById('i2'),要么document.getElementsByName(“用户名”)[0]不返回任何元素。检查所有元素是否存在。首先,您应该确保document.getElementsByName(“用户名”)[0]实际返回一个对象,而不是“

我有一些JavaScript代码给出了这个错误

Uncaught TypeError:无法读取未定义的属性“value”
代码


此错误是什么意思?

要么
document.getElementById('i1')
document.getElementById('i2')
,要么
document.getElementsByName(“用户名”)[0]
不返回任何元素。检查所有元素是否存在。

首先,您应该确保document.getElementsByName(“用户名”)[0]实际返回一个对象,而不是“未定义”。你可以简单地像这样检查

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

另一个元素密码也是如此。

似乎是您的一个值,属性键“value”未定义。在执行if语句之前,测试是否定义了
i1
i2
\uu 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'; }
}

这里的帖子对我找到解决未捕获类型错误的方法有很大帮助:无法读取未定义的问题的属性“值”

这里已经有很多正确的答案,但我们这里没有的是两个答案的组合,我认为这完全解决了这个问题

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

不同之处在于,您进行了检查(如果属性已定义或未定义),如果检查为true,则可以尝试为其赋值。

尝试此操作,它始终有效,并且不会出现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
    }
}

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

function isSet(element, defaultVal){

    if(typeof element != 'undefined'){

        return element;

    }

    console.log('one missing element');

    return defaultVal;
}
并在变量检查中使用它:

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

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

谢谢。。。我忘记了当用户登录时,并没有输入用户名或密码。。。我添加了if语句“if(i2&&i2)”,它可以工作。。有时,最简单的代码可能会给您带来麻烦:感谢您展示正确的方法。尽管我很好奇为什么
if(e)
需要在
catch(e)
中,因为它已经捕获了
(e)
@TetraDev'e'将返回'undefined',除非它是有效的类型错误。因此,您可以验证“if”语句中的TypeError,还可以执行自定义TypeErrors。简单而伟大:)这有助于我找出问题所在。我已经将我的脚本代码从头部部分移到了身体部分,问题就解决了。
var variable = isSet(variable, 'Default value');