m0_46602893 2021-04-18 12:31 采纳率: 91.5%
浏览 69
已采纳

js问题,为什么这里用getElementsByTagName就不行?

<!DOCTYPE html>
<html lang="en">
      <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Document</title>
            <style>
                  div{width: 100px;height: 100px;background-color: red;};

            </style>
            <script>
                  window.onload = function(){
                        var Div = document.getElementsByTagName("div");
                        var i = 0;

                        Div.onmousemove = function(){

                              this.innerHTML =  i++;
                        }
                  }

            </script>
      </head>
      <body>
            <div id="sss"></div>
      </body>
</html>

我想要产生一个效果:鼠标在移动的时候i的值不断在增加i的值;

问题1:为什么我想得到div的值不能用getElementsByTagName?

问题2:当我把var i = 0 放在点击事件函数内部为什么就不能改变i的值?像下面的代码,如果我把它放在内部函数执行的过程是什么?

<!DOCTYPE html>
<html lang="en">
      <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Document</title>
            <style>
                  div{width: 100px;height: 100px;background-color: red;};

            </style>
            <script>
                  window.onload = function(){
                        var Div = document.getElementsByTagName("div");
                        

                        Div.onmousemove = function(){
                              var i = 0;
                              this.innerHTML =  i++;
                        }
                  }

            </script>
      </head>
      <body>
            <div id="sss"></div>
      </body>
</html>
  • 写回答

1条回答 默认 最新

  • Go 旅城通票 2021-04-18 14:56
    关注

    getElementsByTagName返回dom数组,数组没有事件,要遍历里面的dom对象来添加事件

    
    		window.onload = function () {
    			var Div = document.getElementsByTagName("div"); 
    			var i = 0;
    			for (var j = 0; j < Div.length; j++)
    				Div[j].onmousemove = function () {
    					this.innerHTML = i++;
    				}
    		}

    i放函数体里面每次触发事件都会执行函数体定义一个新的i变量赋值为0,当然不会变。

     

    就和定义一个函数,每次执行时(就和事件每次触发一样执行函数)内部定义的变量只在函数体内有效,为定义时的值,不会影响到外部的变量。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 我的数据无法存进链表里
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端