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

Joh*_*ohn 45 javascript typeerror

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

Uncaught TypeError: Cannot read property 'value' of undefined
Run Code Online (Sandbox Code Playgroud)

码:

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'; }
Run Code Online (Sandbox Code Playgroud)

这个错误是什么意思?

OsQ*_*sQu 31

看起来像您的一个值,属性键'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'; }
}
Run Code Online (Sandbox Code Playgroud)

  • 这有助于我找出问题所在.我已将脚本代码从头部区域移动到正文部分,问题解决了. (2认同)

nfe*_*ner 10

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


Joe*_* L. 9

试试这个,它总是有效,你将得到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
    }
}
Run Code Online (Sandbox Code Playgroud)


Abh*_*jit 6

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

if (typeof document.getElementsByName("username")[0] != 'undefined')
Run Code Online (Sandbox Code Playgroud)

同样为其他元素密码.


Fes*_*loe 5

这里的帖子帮助我找到解决Uncaught TypeError的方法:无法读取未定义问题的属性"值".

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

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

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