为了账号安全,请及时绑定邮箱和手机立即绑定

关于js两条语句的差异

关于js两条语句的差异

Will_木 2017-06-01 20:28:54
部分代码<script> function opening(site) {                window.open(site, "newpage", "width=800;height=500");            }  window.onload = openNew;            function openNew() {                var links = document.getElementsByTagName("a");                for (var i = 0; i < links.length; i++)                {                    if (links[i].getAttribute("class") === "openNewWeb")                    {                        links[i].onclick = function () {                           // var urll = links[i].getAttribute("href");                            //opening(urll);                            opening(this.getAttribute("href"));//这句和上面注释掉的两句差异在哪?为什么点击连接后该句打开了新窗口而上面两句没有?                            return false;                        };                    }  }            }        </script> <a class="openNewWeb" href="http://www.cctv.com/" >click here to open CCTV!</a> <a class="openNewWeb" href="http://www.people.com.cn/" >click here to open People!</a>
查看完整描述

1 回答

已采纳
?
磁单极

TA贡献22条经验 获得超19个赞

你那上面的两句语法有问题,这里的links[i].getAttribute("href");注意注意,这个links[i]是undefined,所以js报错,导致后面的语句根本就没有执行,所以他会执行底下的超链接在原来的页面上打开页面,没有执行opening function,所以没有打开新的窗口//img1.sycdn.imooc.com//59301b830001708008650342.jpg你可以在如图的位置加上一个alert(typeof link[i])验证一下是不是undefined,至于为什么,你可以再想一想,或者你把上面的link[i]换成this效果和底下的一句是一样的。

查看完整回答
反对 回复 2017-06-01
  • Will_木
    Will_木
    是因为还未初始化所以吗?
  • 磁单极
    磁单极
    是因为页面在加载的时候,执行了这个onload方法,里面的for循环已经执行完,i已经变成2,你在点击超链接的时候,这个links[2]是不存在的,因为只有links[0],links[1],这就解释了这里为什么是undefined了。
  • Will_木
    Will_木
    原来是这样啊...谢谢大佬!!
  • 1 回答
  • 0 关注
  • 1306 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信