日期:2014-05-16  浏览次数:20355 次

为什么会报错 求大神指教

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">
window.onload = function(){
var imgw = document.getElementById('wrap');
var btn = imgw.getElementsByTagName('span');
var num = imgw.getElementsByTagName('em');

for(var i=0; i<btn.length; i++){
btn[i].onclick = function(){
alert(num[i].innerHTML);
}
}
}
</script>
</head>

<body>
<ul id="wrap">
<li>
<span>喜欢</span>
<em>0</em>
</li>
<li>
<span>喜欢</span>
<em>1</em>
</li>
</ul>
</body>
</html>


TypeError: num[i] is undefined
alert(num[i].innerHTML);

为什么说没定义呢  要怎么样才能 输出 num每个的innerHTML

------解决方案--------------------

 for(var i=0; i<btn.length; i++){
            btn[i].onclick = function(){
               alert(i)
            }
        }  


打印下看看就明白了;
------解决方案--------------------
你的i在循环体里面, 已经循环了2次了,所以就变为2了。
------解决方案--------------------
闭包
i 在退出 for 之后 已经变成了 2

for(var i=0; i<btn.length; i++){
            (function(i){
            btn[i].onclick = function(){
                alert(num[i].innerHTML);
            }
            })(i);
        }  
------解决方案--------------------
这样就可以了
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">
    window.onload = function(){
        var imgw