Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript onclick显示带有for循环的数组的最后一个元素_Javascript - Fatal编程技术网

Javascript onclick显示带有for循环的数组的最后一个元素

Javascript onclick显示带有for循环的数组的最后一个元素,javascript,Javascript,我没什么问题。我与一家公司的API合作。我请求活动,他们返回我一系列活动。这是代码的一部分 client.requestActivities(function(activities) { if (activities.length > 0) { for(i=0; i < activities.length; i++) { var activity = activities[i];

我没什么问题。我与一家公司的API合作。我请求活动,他们返回我一系列活动。这是代码的一部分

client.requestActivities(function(activities) {
        if (activities.length > 0) {
            for(i=0; i < activities.length; i++) {
                var activity = activities[i];
                activity.onStart(function() { alert(i+ " started"); });
                activity.onCredit(function() { alert(i+ " credit"); });
                activity.onClose(function() { alert(i+ " close"); });
                activity.onFinish(function() { alert(i+ " finish"); });
                            $('.Game-Screen-Footer').append('<div class="Game-Screen-Footer-Adv" id="foota'+i+'"><a href="javascript:;" ><img src="'+activity.image_url+'" alt="'+activity.display_text+'" width="190" height="110"></a></div>');
                document.getElementById('foota'+i+'').onclick = function() {
                ARNO.box.show({html:'<div id="socialVibeFancyBox0"></div>', close: false, width:activity.window_width, height:activity.window_height, openjs: 
                            function(){
                                client.loadActivityIntoContainer(activity, 'socialVibeFancyBox0');
                            }
                        });
            }
        }
client.requestActivities(功能(活动){
如果(activities.length>0){
对于(i=0;i
}


大多数情况下,此函数返回包含3个元素的数组。但当我单击第一个“活动”时,它会向我发出警报(0开始),但会向我发出警报(4开始),这意味着,它会提醒i的最后一个元素。我应该如何修复此问题?我尝试了很多方法,但尚未找到解决方案,也许您可以帮助我?

这是另一个关闭问题。请尝试以下方法:

for( i=0; i<activities.length; i++) {
    (function(i) {
        // your code here
    })(i);
}

for(i=0;i将
for
循环的核心部分移到函数中,并传入需要单独确定范围的值

for(i=0; i < activities.length; i++) {
    setUpActivity(i, activities[i]);
}
for(i=0;i

功能设置活动(i,活动){
activity.onStart(函数(){alert(i+“started”);});
activity.onCredit(函数(){alert(i+“credit”);});
activity.onClose(函数(){alert(i+“close”);});
activity.onFinish(函数(){alert(i+“finish”);});
阿诺·博克斯·秀({
html:“”,
关闭:false,宽度:activity.window\u width,
高度:activity.window\u高度,
openjs:function(){
client.loadActivityIntoContainer(活动'socialVibeFancyBox0');
}
});
}

函数调用将创建一个新的变量作用域。在函数中创建的任何变量或参数都将在它们自己的作用域中,并且在同一作用域中创建的函数将永久引用这些变量。

如果您不关心IE8,那么ES5已经用
forEach
解决了这个问题:

activities.forEach(function(v, i){
  // now 'i' will work anywhere within this scope
});

@Kolnik:听起来很有意思。你是否需要一个参考问答来详细解释手头的这个关闭问题?
activities.forEach(function(v, i){
  // now 'i' will work anywhere within this scope
});