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