this为什么不能用oA[i]代替

<html>
<head>
    <title>dom</title>
    <meta charset="utf-8"/>
    <script>
    window.onload=function(){
        var oA=document.getElementsByTagName("a");
        for(var i=0;i<oA.length;i++){
            oA[i].onclick=function(){
                this.parentNode.style.display="none";
            }
        }
    }
    </script>
</head>
<body>
<div>
<ul>
<li>1111111111<a href="javascript:;"/>隐藏</a></li>
<li>2222222222<a href="javascript:;"/>隐藏</a></li>
<li>3333333333<a href="javascript:;"/>隐藏</a></li>
<li>4444444444<a href="javascript:;"/>隐藏</a></li>
</ul>
</div>
</body>
</html>
阅读 3k
5 个回答

因为你在绑定onclick方法的时候,它本身并没有执行,而是在点击事件触发的时候在执行。
到那时候由于for循环早就做完了,i等于oA.length - 1,oA[i]是oA的最后一位,而不是oA的每一位。

新手上路,请多包涵

@SevenOutman 已经解释过了,循环时候是在绑定事件,而当点击时候循环已经结束,此时i值为oA.length,oA[i]是不存在的。

这种问题……你单步一下不就都知道了吗……

你需要一个自执行函数(闭包)来保存循环值i的引用

<title>dom</title>
<meta charset="utf-8"/>
<script>
window.onload=function(){
    var oA=document.getElementsByTagName("a");
    for(var i=0;i<oA.length;i++){
        (function(i) {
            oA[i].onclick=function(){
                oA[i].parentNode.style.display="none";
            }
        })(i);
    }
}
</script>

这样算不算oA[i] 替换 this ^_^

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题