53

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

这个错误是什么意思?

4

7 回答 7

36

似乎您的值之一,属性键为“值”是未定义的。测试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'; }
}
于 2011-07-01T16:50:15.423 回答
14

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

于 2011-07-01T16:48:29.113 回答
11

试试这个,它总是有效的,你会得到 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
    }
}
于 2014-05-09T14:34:13.397 回答
6

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

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

对于其他元素密码也是如此。

于 2011-07-01T16:49:13.987 回答
6

这里的帖子在我找到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;
 }
}

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

于 2013-04-17T14:17:23.230 回答
1

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

function isSet(element, defaultVal){

    if(typeof element != 'undefined'){

        return element;

    }

    console.log('one missing element');

    return defaultVal;
}

并在变量检查中使用它:

var variable = isSet(variable, 'Default value');
于 2018-10-22T08:23:47.857 回答
0

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

于 2019-04-15T03:02:08.030 回答