我有这个功能与关闭工作在JavaScript
function createSlidingGallery(){
gallery_position = parseInt(jQuery(".imageWrapper.default").attr("rel"));
gallery_position_min = 0;
gallery_position_max = parseInt(jQuery("#galleryEl .sig_thumb a").size() - 1);
var galleryWrapper = document.createElement("div");
galleryWrapper.className = "sGalleryWrapper";
for (var i = 0; i < gallery_position_max; i++) {
var slide = document.createElement("div");
slide.className = "slide slide"+(i);
slide.setAttribute('rel', i);
galleryWrapper.appendChild(slide);
};
jQuery(".imageWrapper.top").append(galleryWrapper);
//HERE COMES THE PROBLEM PART
for (var i = 0; i < gallery_position_max; i++) {
var position = i;
//THE CALLBACK ACTUALLY USES THE SAME CONTEXT FOR ALL PARTICULAR CALLS SO THAT THE POSITION VALUE HOLDS THE MAXIMUM VALUE IN ALL INSTANCES
loadImage(position, false, function(index){
console.log(index);
jQuery(".slide"+position).css({
'background': 'url('+backgroundImages[index].src+')'
});
});
};
hideLoadingDC();
}
它应该做的是异步加载图片到dynamicaly创建的元素。它实际上创建了所有元素,并且它也加载了图像。但有一个称为loadImage的函数,用于预加载图像,然后保存这些图像已经加载并且可以缓存的信息。我用回调函数调用它来处理加载的图像,并将其设置为适当元素的背景。因此,我需要保存有关元素的信息(如指针或索引/位置)。 现在我试图将它的索引传播给函数,但是因为回调函数在一段时间后被调用,位置变量已经具有其他值(for循环实际上经过并且在回调的所有调用中它被设置为最大值值)
我知道我可以改变loadImage函数并添加位置作为另一个属性,但我会优先考虑任何其他解决方案。我不想改变loadImage函数。
经典功能-IN-A环/闭合问题。这个问题的一个变种至少每天在这里问。 –