2012-07-31 109 views
0

如果该标识不存在,则脚本会中断。为什么?缺少元素中断脚本(getElementById)

如何改变the_lis?

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8" /> 
<title>test</title> 
</head> 
<body> 
<script> 
window.onload = function(){ 
alert('this will alert'); 
var the_id = document.getElementById('a_id_that_does_not_exist'), 
the_lis = the_id.getElementsByTagName('li'); 
alert('this will NOT alert'); 
} 
</script> 
</body> 
</html> 

回答

0

你真的应该检查,看看the_id存在与否首先使用if声明,其他明智的一个异常将被抛出。

window.onload = function(){ 
alert('this will alert'); 
var the_id = document.getElementById('a_id_that_does_not_exist'); 
if (the_id != undefined) 
    the_lis = the_id.getElementsByTagName('li'); 
alert('this will NOT alert'); 
} 
0

the_id是空的,null没有一个getElementsByTagName方法。咄。

要么确保ID存在,你写你的代码之前,或类似明确地检查它:

var the_lis = the_id ? the_id.getElementsByTagName('li') : []; 
1

因为第一元素不存在the_idnull。在null上调用方法getElementsByTagName将导致错误。

0

从我的理解,getElementsByTagName返回一个数组。但是在此之前,the_id应该为空或未定义,因为它不存在,因此您试图在空实例上调用getElementsByTagName。

我建议(除非不适用)使用jQuery做任何你正在试图做的,并使用Firebug调试JavaScript中

+0

[的getElementsByTagName(http://www.w3.org/TR/ 2004/REC-DOM-Level-3-Core-20040407/core.html#ID-A6C9094)返回[NodeList](http://www.w3.org/TR/2004/REC-DOM-Level-3- Core-20040407/core.html#ID-536297177),而不是数组。 jQuery不会帮助,它会默默地失败。您是否想在发生错误的时候立即知道错误,或者稍后可能会被其他代码和处理混淆? – RobG 2012-07-31 01:56:58

+0

我站在正确的先生!目前我正在学习有关JavaScript的知识,所以迄今为止我的知识都是一个小小的风格! – series0ne 2012-07-31 08:58:13

+0

没问题,参与讨论是非常有用的学习工具。 – RobG 2012-07-31 23:53:31