好的,这里有一个问题脚本。
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:one,two和three。
我在每个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 );
}
还有其他人做过不同的事情吗?
有没有一种非常聪明的方法来做这件事?
有人知道图书馆是如何做到这一点的吗?