事件点击函数 为什么buttons[i].className不起作用

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

    buttons[i].onclick=function(){
    
    var myIndex=this.getAttribute('index');
    var indexOffset=parseInt(myIndex-index)*(-600);
    animate(indexOffset);
    index=myIndex;
    this.className='on';//这一步 必须要用this才能实现效果 为什么

}
}

阅读 1.7k
2 个回答
for(var i=0;i<buttons.length;i++){

    buttons[i].onclick=function(e){
    
    var myIndex=this.getAttribute('index');
    var indexOffset=parseInt(myIndex-index)*(-600);
    animate(indexOffset);
    index=myIndex;
    e.target.className='on';//这一步 必须要用this才能实现效果 为什么
}
}

这样也行

我不想解释 为什么 e.target 和 this 可以 但是 buttons[i]不行 但是 for(let i; i < buttons.length; ++i)就可以,以及e.currentTarget和e.target有什么区别。

别折磨我

兄弟你这是对event和this指向问题不怎么理解,在事件中 this指向的是当前元素 比如你给每个button绑定了点击事件,那么this指的是当前你点击的那一个, 而event.target是当前元素,所以这两个在概念上是一样的。 而currenttaret是指绑定事件的当前元素 两者本身差别不大,因为具体用到的方面不一样 所以得因需求而定

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题