未捕获的类型错误:无法读取未定义的属性“值”

IT技术 javascript typeerror
2021-01-27 09:03:56

我有一些 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'; }

这个错误是什么意思?

6个回答

似乎是您的值之一,属性键为 'value' 未定义。测试i1,i2__i在执行 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'; }
}
这有助于我找出我的问题。我已将我的脚本代码从 head 部分移到 body 部分,问题解决了。
2021-03-27 09:03:56

要么document.getElementById('i1')document.getElementById('i2')或者document.getElementsByName("username")[0]是没有返回元素。检查,所有元素都存在。

谢谢...我忘记了当用户登录时,没有名为用户名或密码的输入...我添加了 if 语句 'if(i2 && i2)' 并且它有效...有时最简单的代码可能会让你遇到麻烦:D
2021-03-25 09:03:56

试试这个,它总是有效,你不会得到 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
    }
}
简单而伟大:)
2021-03-20 09:03:56
@TetraDev 'e' 将返回 'undefined' 除非它是一个有效的 TypeError。因此,您可以在“if”语句中验证 TypeError,并且您还可以执行自定义 TypeError。
2021-03-21 09:03:56
感谢您展示这样做的正确方法。虽然我很好奇为什么if(e)需要在里面,catch(e)因为它已经抓住了(e)
2021-03-25 09:03:56

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

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

其他元素密码也类似。

此处的帖子在我为Uncaught TypeError: Cannot read property 'value' of undefined issue寻找解决方案的过程中帮了我很多忙

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

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

不同之处在于您进行检查(是否定义了属性),如果检查为真,那么您可以尝试为其分配一个值。