好的,这是一个问题脚本。
var links = [ 'one', 'two', 'three' ];
for( var i = 0; i < links.length; i++ ) {
var a = document.createElement( 'div' );
a.innerHTML = links[i];
a.onclick = function() { alert( i ) }
document.body.appendChild( a );
}
此脚本使用数组生成三个 div:一、二和三。
我在每个 div 上设置了一个(为简单起见是 Dom0)单击处理程序,它会提醒其在数组中的位置索引。- 除了它没有!它总是提醒 3,数组的最后一个索引。
这是因为 'alert(i)' 中的 'i' 是对外部范围(在本例中为全局)的实时引用,并且在循环结束时其值为 3。它需要的是一种在循环中取消引用 i 的方法。
这是一种解决方案,我倾向于使用它。
var links = [ 'one', 'two', 'three' ];
for( var i = 0; i < links.length; i++ ) {
var a = document.createElement( 'div' );
a.innerHTML = links[i];
a.i = i; //set a property of the current element with the current value of i
a.onclick = function() { alert( this.i ) }
document.body.appendChild( a );
}
其他人有什么不同的吗?
有没有真正聪明的方法?
有谁知道图书馆是如何做到这一点的?