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

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条回答 默认 最新

  • 斯洛文尼亚旅游 2021-04-18 06: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,当然不会变。

     

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    m0_46602893 2021-04-18 07:16

    如果我把var i =0放在这个函数内部,我在移动鼠标的时候刚开始i=0,后来应该执行i++,i 应该等于1,而且在我不移动的时候相当于函数执行结束,i的值应该自行消失。。。?

    回复
    斯洛文尼亚旅游 回复 m0_46602893 2021-04-18 07:41

    你这样理解不对哦。。不是说一直移动就一直执行着onmousemove,而是每次移动都会重新执行一次onmousemove

    回复
    m0_46602893 回复 斯洛文尼亚旅游 2021-04-18 07:52

    但是每次执行的时候为什么i++不执行?应该执行完毕后i=1才对。。。?

    回复
    展开全部5条评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 爱快路由器端口更改错误导致无法访问
  • ¥20 安装catkin时遇到了如下问题请问该如何解决呢
  • ¥15 VAE模型如何输出结果
  • ¥15 编译python程序为pyd文件报错:{"source code string cannot contain null bytes"
  • ¥20 关于#r语言#的问题:广义加行模型拟合曲线后如何求拐点
  • ¥15 fluent设置了自动保存后,会有几个时间点不保存
  • ¥20 激光照射到四象线探测器,通过液晶屏显示X、Y值
  • ¥50 数据库开发问题求解答
  • ¥15 安装anaconda时报错
  • ¥15 小程序有个导出到插件方式,我是在分包下引入的插件,这个export的路径对吗,我看官方文档上写的是相对路径
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部