如何修复未捕获的类型错误
2013-12-05
123
以下代码行导致未捕获的 TypeError:
document.getElementById('leaveblank').className = "noshow";
我知道这是因为 DOM 中没有 #leaveblank ID(该脚本在另一个页面上使用)。我还知道修复此问题的方法可能是添加 IF 语句。
但是,我不确定这个语法应该是什么样的,或者我是否需要先将 getElement 设置为 var?
以下是完整的控制台错误供参考:
Uncaught TypeError: Cannot set property 'className' of null
3个回答
正如您引用的错误所暗示的那样,如果
document.getElementById()
未找到您提供的 id 对应的元素,则它将返回
null
。所以:
var el = document.getElementById('leaveblank');
if (el != null)
el.className = "noshow";
您可以将
if
条件简化为:
if (el)
...因为如果找到一个元素,那么
el
将是一个对象,并且所有对象都是“真实的”。
如果您使用 jQuery(正如您标记问题的方式所暗示的那样),则不必担心元素是否存在,您只需执行以下操作:
$("#leaveblank").attr("className", "noshow");
// or, if you just want to add the class to the element
$("#leaveblank").addClass("noshow");
$("#leaveblank")
部分创建一个包含一个或零个元素的 jQuery 对象; jQuery 方法(例如
.attr()
或
.addClass()
)可对调用它们的 jQuery 对象中的任何元素进行操作,如果没有元素则不会出现任何错误。
nnnnnn
2013-12-05
尝试一下
var lb = document.getElementById('leaveblank');
if(lb)
lb.className = "noshow";
rynhe
2013-12-05
使用 jQuery 不会出现错误,因为 jQuery 会处理这个问题:
$('#leaveblank').attr('class', 'noshow');
纯 JS 应该是:
if (document.getElementById('leaveblank').length) {
// code
}
Alex
2013-12-05