开发者问题收集

如何修复未捕获的类型错误

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