我的UL有5个Li,在li中它有一个href,而我点击a,它必须从ul显示它的索引号。例如,如果我点击3rd li,那么它应该是alet 3.因为我正在使用这个功能:
var titles = document.getElementById('bigscreen-titles'); if(titles){
var links = titles.getElementsByTagName('a');
for(i=0;i<links.length;i++){
links[i].onclick = function(){
alert(i);
}
}
}
但它总是显示5.即使我点击1st li,它显示相同,任何正确的方式..请
答案 0 :(得分:1)
解决方案如下:
if(titles){
var links = titles.getElementsByTagName('a');
for(i=0;i<links.length;i++){
links[i].onclick = function(currentIndex){
return function () {
alert(currentIndex);
}
}(i)
}
}
外部函数称为立即函数。这意味着该函数在定义后立即执行。所以它返回一个新函数,即内部函数。这些函数获得currentIndex
的引用。这被称为闭包。
答案 1 :(得分:0)
这种行为是由于'闭包'引起的,并且基本上是因为警报函数在循环结束后的某个时刻运行,此时'i'为5。
你应该能够通过简单的改变来解决这个问题......
if(titles){
var links = titles.getElementsByTagName('a');
for(i=0;i<links.length;i++){
links[i].onclick = function(index){
return function() {
alert(index);
}
}(i)
}
}