返回数组中单击元素的索引,并将变量的值设为外部?

时间:2017-08-19 23:11:28

标签: javascript arrays loops scope closures

好的,这就是我现在的代码:

(function slideshow(){

   var arr = [first, second, third, forth];
   for( var i = 0; i < arr.length; i++){
      arr[i].addEventListener('click', function(){
         alert(i);
      });
   }

   var d = 0;

}());

我在最后一小时尝试做的事情并且悲惨地失败,是i是数组中被点击元素的索引。现在alert(i)总是返回4而不是点击元素的索引号。

我想要发生的另一件事是让该值(indexOf被点击的元素)成为d的值,它在for循环之外。

即。默认为d=0,直到您点击arr[i]然后d = i为止。有什么想法我会怎么做?

1 个答案:

答案 0 :(得分:2)

这是因为ii循环后for所拥有的值。 03是您的索引,4是退出循环的值,因为它大于您的数组长度。

您需要做的是实际拥有一个存储在firstsecond等中的值,您可以抓住它。

您可以在元素中存储i的实际值:

var arr = [first, second, third, forth];
for( var i = 0; i < arr.length; i++){
   arr[i].setAttribute('data-index', i);
   arr[i].addEventListener('click', function(){
      alert(this.getAttribute('data-index'));
   });
}