我有這個功能與關閉工作在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環/閉合問題。這個問題的一個變種至少每天在這裏問。 –