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,当然不会变。

     

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

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

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?