Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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函数直到循环结束后才执行_Javascript_Arrays_Loops - Fatal编程技术网

Javascript函数直到循环结束后才执行

Javascript函数直到循环结束后才执行,javascript,arrays,loops,Javascript,Arrays,Loops,我试图循环遍历一个数组,其中包含产品编号以及其他内容(价格、数量等)。产品编号用于生成在不同函数中调用的图像。当我调用函数并将循环变量传递给它时,在循环完成之前不会发生任何事情。然后生成所有产品图像,但它们是相同的。我不知所措 for (var g = 0, len = oldDetails.length; g <= len - 1; g++) { loaditem (oldDetails[g]['product_number'],g); } function loaditem (

我试图循环遍历一个数组,其中包含产品编号以及其他内容(价格、数量等)。产品编号用于生成在不同函数中调用的图像。当我调用函数并将循环变量传递给它时,在循环完成之前不会发生任何事情。然后生成所有产品图像,但它们是相同的。我不知所措

for (var g = 0, len = oldDetails.length; g <= len - 1; g++) {
    loaditem (oldDetails[g]['product_number'],g);
}
function loaditem (itemnumber, itemlocation) {
     document.getElementById('divid' + itemlocation).innerHTML = '<img src = "' + itemnumber + '.jpg" />';
}

for(var g=0,len=oldDetails.length;g既然您发布了完整的代码,问题就可以找到了
添加到您在
loaditem
方法中使用的全局变量

如果您将它们转换为本地(因为它们在每次迭代中都会被更改,所以您应该这样做),它应该可以工作

像这样的

函数loaditem(newItemNumber,count){
var itemNumber=newItemNumber.toUpperCase(),
查找编号;
//武器管理员
开关(itemNumber.子字符串(0,1)){
案例“A”:
lookupNumber=itemNumber.replace(itemNumber.substring(2,3),“0”);
打破
案例“R”:
lookupNumber=itemNumber.replace(itemNumber.substring(2,3),“0”);
打破
案例“M”:
lookupNumber=itemNumber.replace(itemNumber.substring(2,3),“0”);
打破
案例“N”:
lookupNumber=itemNumber.replace(itemNumber.substring(2,3),“0”);
打破
违约:
lookupNumber=项目编号;
}
//短跑手
if(itemNumber.substring(4,5)='-'){}else{
lookupNumber=lookupNumber.replace('-','');
}
count=count.substr(count.length-1,count.length);
orderDetails[count][0]=itemNumber;//将产品#添加到orderDetail数组
var imgSource=http://s3.amazonaws.com/images2.eprevue.net/p4dbimg/767/image480/“+lookupNumber.toLowerCase()+”_con.jpg';
var imageTest=$(“');
})
.错误(函数(){
imgSource=http://s3.amazonaws.com/images2.eprevue.net/p4dbimg/767/image480/“+lookupNumber.toLowerCase()+”.jpg';
imageTest_con.attr('src',imgSource).load(函数(){
getElementById(“产品图像”+count).innerHTML='';
})
.错误(函数(){
imgSource=http://hekmancontract.andrewchristmann.com/quote-sheet/images/image-missing.jpg';
getElementById(“产品图像”+count).innerHTML='';
});
});
document.getElementById('pnum'+count).innerHTML=”“+itemNumber.toUpperCase();
}

因此,问题是您声明了一些全局变量,同时设置了一些使用这些变量的异步回调(加载
load
error
事件)


调用
loadItem
的循环的每次迭代都会更改全局变量,而在加载映像时(异步地)会使用这些全局变量的实际值。因此,在图像加载之前,
imgSource
变量会更改其值,然后用于实际的DOM
img
插入。

for循环语法错误。其中应该只有三条语句。for(var g=0;len@glcheetham这是不正确的……代码应该可以工作。你确定数据源不同吗?你应该发布
oldDetails
内容,这应该是一个很好的教训,告诉你为什么总是使用
var
。当你不知道不把'var'放在变量前面会将它们声明为glo时,很难发现bugbal.这解决了问题,谢谢。作为参考,我还必须将var添加到count变量中。顺便说一句,我学到的经验教训是,不要假设我知道问题是什么。代码越多越好。@AndrewC.没有
var count
,它不起作用吗?因为
count
是本地的,因为它是函数的一个参数。没有“var cou”nt“它不起作用。你帮了我很大的忙,解决了这个问题,但就我的理解,我不明白变量是否是全局变量有什么关系。我的理解是全局变量适用于所有函数,局部变量,以及局部变量。由于“for”语句重新定义了全局计数,我不明白它为什么重要变量每次循环都会被重新定义。有简要的解释吗?