下面是一段很正常的代码,获取元素循环元素,点击其中一个li的时候弹出相对应的索引,为什么点击每一个li都弹出(点击的是第5个li')呢?因为循环跑的太快了,等你点击的时候当时的i值就是最后一个,怎么样才能解决?
var lis = document.getElementsByTagName('li')
console.log(lis);
for(var i = 0; i < lis.length; i++) {
lis[i].addEventListener('click', function () {
alert('点击的是第' + i + '个li')
},'false')
}
解决方案:
1.闭包保存正确状态
var lis = document.getElementsByTagName('li')
console.log(lis.length)
for (var i = 0; i < lis.length; i++) {
(function (index) {
lis[i].addEventListener('click', function () {
index=index+1
alert('点击的是第' + index + '个li')
})
}(i))
}
2.用jquery中的each
$('li').each(function (index, item) {
$(item).click(function () {
alert('点击的是第' + index + '个li')
})
})
网友评论