为什么赋值写在函数里就不起作用了?

来源:10-1 编程挑战

慕圣9424722

2017-08-25 19:53

    如下代码中, 把 li[i].index=i写在onmouseover的函数里(不是for循环中),代码就没有效果了,这是为什么呢?

<script type="text/javascript">

      window.onload=function(){

      var p=document.getElementsByTagName("p");

      var li=document.getElementsByTagName("li");

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

      li[i].index=i;

      li[i].onmouseover=function(){

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

      li[i].className="";

      p[i].className="hide";

      }

      this.className="active";

      p[this.index].className="show";      

      }

      }

    }

    </script>


写回答 关注

4回答

  • 慕运维3393194
    2017-08-27 21:30:35
    已采纳

     这里面li[i].onmouseover=function()相当于

    <li onmouseover="a"> <!--第i+1个li-->

    function a(){}

    把 li[i].index=i;写到里面,其实并没有i的值,所以下面li[i]都是用this,代表li[i]该对象,可以这样尝试一下,分别把

    this.index=0   this.index=1   this.index=2,放到onmouseover的函数里,就会只显示序号对应的图像

    慕运维339... 回复慕运维339...

    for循环依次将三个<li>与onmouseover函数连起来,当其中一个<li>触发时,便会执行该函数。(仅供参考)

    2017-08-28 08:31:55

    共 3 条回复 >

  • 山_3
    2017-08-28 13:58:07

    可能是作用域的关系    li[i].index=i写在函数里 作用范围就只在函数内部  外部无法调用

  • Adrian_lee
    2017-08-26 13:59:46

    别的问题不知道,首先你的for循环都是循环i就不对

    Adrian... 回复慕圣9424...

    O.O刚刚试了,好像可以,我以前用jquery不行O.O

    2017-08-26 17:49:43

    共 2 条回复 >

  • 慕慕6136893
    2017-08-26 13:40:25

    这应该是函数的执行环境的问题,如果写在onmouseover的函数里,当函数执行完,执行环境被销毁,li[i].index=i也会被销毁,所以就没有了,应该是,我也不是特别清楚。

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468060 学习 · 21891 问题

查看课程

相似问题