为什么一定要用titles[i].id = i;然后用divs[this.id]去取到元素而不用divs[i]?

来源:1-5 编程练习

CoolIsLife

2015-04-02 11:13

练习题中实测,用divs[i]不行,而divs[this.id]就可以,不知道为啥

for(var i=0;i<titles.length;i++){
         titles[i].id = i;
         titles[i].onclick = function(){
            //  alert(conts[this.id].style.display);
             if(divs[this.id].style.display == "none"){
                 divs[this.id].style.display = "block";
             }else{
                 divs[this.id].style.display = "none";
             }
         }
     }

写回答 关注

3回答

  • 用户已禁用
    2015-04-02 12:43:49
    已采纳

    因为onclick是事件绑定函数,也就是说你的click事件发生的时候,局部变量i早就不存在了(undefined)。所以需要把i存入到titles的每个对象中,这样当你很久之后发生click事件时,还是能读取到正确的i的值。

    Jeoop

    那请问有什么办法可以解决这个问题呢?如果给元素添加id的话不会产生污染嘛?

    2017-09-24 09:32:15

    共 7 条回复 >

  • YoloMonkey
    2016-10-21 20:04:26

    因为onClick不是立即执行的,实际上当事件处理函数执行时,这里如果使用i的话会引用同一个i,而且这个i值等于for循环结束时i的值。

    实际上这里起的效果跟闭包是一样的,具体效果是让每一个事件处理函数都有属于它自身的i值,而不是引用同一个i。

  • wyizhou
    2015-04-02 12:05:31

    在Javascript的事件函数的this指针是指向调用它的元素。比如:

    <div id="test"></div>

    div1.onclick = function( ) {

        alert(this.id);   //输出test

    };

Tab选项卡切换效果

本课程详细介绍网页页面中最流行常用的tab切换效果

65469 学习 · 533 问题

查看课程

相似问题