m0_46602893 2021-04-17 21:58 采纳率: 91.5%
浏览 36
已结题

js问题,下面的代码为什么不能这么分析?

<!DOCTYPE html>
<html lang="en">

<head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <script>
            window.onload = function () {
                  var Btns = document.getElementsByTagName("button");
                  for (i = 0; i < Btns.length; i++) {
                        //为什么把这个放在里面就是未定义??
                        Btns[i].onclick = function () {

                              alert(this);
                        }
                  }
            }
      </script>
</head>

<body>
      <button>按钮1</button>
      <button>按钮2</button>
      <button>按钮3</button>

</body>

</html>

i代表的是这三个按钮的下标,那

Btns[i].onclick = function () {

 

                              alert(this);

                        }

中的i就分别代表了按钮1、2、3,那我在alert(this)的时候就应该分别对应这三个按钮但是为什么只有我当只用下面代码的时候才正确?

<!DOCTYPE html>
<html lang="en">

<head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <script>
            window.onload = function () {
                  var Btns = document.getElementsByTagName("button");
                  for (i = 0; i < Btns.length; i++) {
                        Btns[i].index = i;
                        //为什么把这个放在里面就是未定义??
                        Btns[i].onclick = function () {

                              alert(this.index);
                        }
                  }
            }
      </script>
</head>

<body>
      <button>按钮1</button>
      <button>按钮2</button>
      <button>按钮3</button>

</body>

</html>

问题2:在上面的这段代码中为什么Btns[i].index = i;这个代码不能放在

 Btns[i].onclick = function () {

 

                              alert(this.index);

                        }

这段代码中,而必须放在外面才行?

  • 写回答

3条回答 默认 最新

  • zt13502162671 2021-04-17 22:19
    关注

    因为作用域不同呀,一个是在onclick的funtion了,这时候的this指向的是button,二你后面的this.index指的还是button,但是因为你给button加了一个属性index赋值=i,这时候你活得this.index 就等于i了,如果你要输出i 那你就直接alert(i)就好了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月4日
  • 已采纳回答 8月27日

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路