我有一些 JavaScript 代码给出了这个错误:
未捕获类型错误:无法读取未定义的属性“值”
这是我的代码:
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'; }
这个错误是什么意思?
似乎您的值之一(属性键为“value”)未定义。在执行 if 语句之前测试
i1
、i2
和 __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'; }
}
document.getElementById('i1')
、document.getElementById('i2')
或 document.getElementsByName("username")[0]
不返回任何元素。检查所有元素是否存在。
试试这个,它总是有效,并且你不会得到任何类型错误:
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
}
}
首先,您应该确保 document.getElementsByName("username")[0] 实际上返回一个对象而不是“未定义”。您可以简单地检查一下
if (typeof document.getElementsByName("username")[0] != 'undefined')
其他元素密码也类似。
这里的帖子对我找到解决方案未捕获的类型错误:无法读取未定义的属性“值”问题有很大帮助。
这里已经有很多正确的答案,但我们这里没有的是我认为可以完全解决这个问题的 2 个答案的组合。
function myFunction(field, data){
if (typeof document.getElementsByName("+field+")[0] != 'undefined'){
document.getElementsByName("+field+")[0].value=data;
}
}
区别在于您进行检查(是否定义了属性),如果检查为真,那么您可以尝试为其分配一个值。
您可以创建一个函数来检查变量是否存在,否则将返回默认值:
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 元素之前检查它们是否存在。
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
if (event.target && event.target.value) {
const value = event.target.value.toLowerCase();
setSearchTerm(value);
}
};