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";
}
}
}
因为onclick是事件绑定函数,也就是说你的click事件发生的时候,局部变量i早就不存在了(undefined)。所以需要把i存入到titles的每个对象中,这样当你很久之后发生click事件时,还是能读取到正确的i的值。
因为onClick不是立即执行的,实际上当事件处理函数执行时,这里如果使用i的话会引用同一个i,而且这个i值等于for循环结束时i的值。
实际上这里起的效果跟闭包是一样的,具体效果是让每一个事件处理函数都有属于它自身的i值,而不是引用同一个i。
在Javascript的事件函数的this指针是指向调用它的元素。比如:
<div id="test"></div>
div1.onclick = function( ) {
alert(this.id); //输出test
};
Tab选项卡切换效果
65469 学习 · 533 问题
相似问题