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

请问这段代码哪里错了,为什么没有效果?

请问这段代码哪里错了,为什么没有效果?

懒人00 2016-09-05 19:44:17
<!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>Document</title> </head> <body>     <input type="button" value="第一个" />     <input type="button" value="第二个" />     <input type="button" value="第三个" />     <script>              var btn = document.getElementsByTagName('input');                         for(var i = 0; i < btn.length; i ++) {             btn[i].onclick = function(){                 if(i==0){                     alert("这是第一个");                 }                 if(i==1){                     alert("这是第二个");                 }                 if(i==2){                     alert("这是第三个");                 }                                     }         }                                   </script> </body> </html>
查看完整描述

3 回答

已采纳
?
stone310

TA贡献361条经验 获得超191个赞

i=0的时候判断i<btn.length为true,然后i++,i=1;

i=1的时候判断i<btn.length为true,然后i++,i=2;

i=2的时候判断i<btn.length为true,然后i++,i=3;

i=3的时候判断i<btn.length为false,

所以最后i为3

i放在事件内部是不会循环的,因为页面加载时for循环绑定了 btn[i].onclick事件,而这是个异步加载,页面加载好后i已经循环完毕,是个定值,就是btn.length,在这里即为3


查看完整回答
1 反对 回复 2016-09-05
  • 懒人00
    懒人00
    i放在事件内部为什么是不会循环的啊??异步加载时什么意思
  • stone310
    stone310
    异步加载在这里就是页面加载完毕之前先执行完毕for循环,这时for循环已经结束了,i已经是3了,但是你的onclick事件还没开始,所以你点击的时候i就是3
  • 懒人00
    懒人00
    嗯,谢谢了
?
如风糖

TA贡献8条经验 获得超1个赞

你搜索一下js闭包 就能解决你的问题

查看完整回答
反对 回复 2016-09-06
?
黑女2008

TA贡献75条经验 获得超32个赞

循环绑定,就相当于是每个按钮有一个点击事件,比如你点击第一个的时候,调用第一个的事件,但是此时你的i是当时循环的时候的最后i的值,是3,并不是你这次点击的第i个。

可以直接这样写:

var btn = document.getElementsByTagName('input');            

            for(var i = 0; i < btn.length; i ++) {

            btn[i].onclick = function(){

            alert(this.defaultValue);                      

            }

        }


查看完整回答
反对 回复 2016-09-05
  • 懒人00
    懒人00
    我主要的目的不是得到这几个值,而是要为每个元素绑定相同的事件,设置不同的效果的,为什么i是最后的值呢
  • 3 回答
  • 0 关注
  • 1518 浏览
慕课专栏
更多

添加回答

举报

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