我試圖製作一個圖像滑塊,每隔幾秒更改圖像'displayMain'。我的問題是,當我在setInterval中調用displayMain函數時,我不斷得到「無法讀取未定義的屬性0」錯誤。即使當我使用jsonData [i] .name的硬編碼值時,我也會收到同樣的錯誤。然而,該值在displayThumbs中傳遞得很好。有誰知道爲什麼我不能保留displayMain中的值,但可以在displayThumbs中這樣做?無法讀取未定義JSON的屬性'0'
window.addEventListener('load', function() {
var mainDiv = document.getElementById('main');
var descDiv = document.getElementById('main-description');
var gallery = document.querySelector('#main-img');
var ul = document.querySelector('ul');
var li;
var i = 0;
var displayThumbs;
var thumbName;
var current = 0;
var images = [];
function displayMain() {
var data = images[i];
gallery.src = 'img/' + data[0];
descDiv.innerHTML = '<h2>' + data[1] + '</h2>';
}
function displayThumbs() {
for (i = 0; i < images.length; i += 1) {
var data = jsonData[i].name.replace('.jpg', '_thumb.jpg');
// thumbnails use dom to make img tag
li = document.createElement('li');
thumbs[i] = document.createElement('img');
var createThumbNail = thumbs[i].src = 'img/' + data;
thumbs[i].setAttribute('alt', data);
thumbs[i].addEventListener('click', function() {
alert(createThumbNail);
});
ul.appendChild(thumbs[i]);
}
}
// success handler should be called
var getImages = function() {
// create the XHR object
xhr = new XMLHttpRequest();
// prepare the request
xhr.addEventListener('readystatechange', function() {
if (xhr.readyState === 4 && xhr.status == 200) {
// good request ...
jsonData = JSON.parse(xhr.responseText);
for (var i = 0; i < jsonData.length; i += 1) {
var data = [];
data.push(jsonData[i].name);
data.push(jsonData[i].description);
images.push(data);
}
displayMain();
displayThumbs();
setInterval(displayMain, 1000);
}
else {
// error
}
});
xhr.open('GET', 'data/imagedata.json', true);
xhr.send(null);
};
// setInterval(getImages, 2000);
getImages();
// displayThumbs();
});
什麼是'setInterval(displayMain,1000)'應該在做什麼?除非圖像本身在服務器上發生變化,否則這絕對不會做任何事情。另外,你有沒有試過在調試器中執行並在for循環運行後檢查'images'的值? – tjameson
我想讓setInterval轉到下一張圖片,但如果我無法在displayMain函數中保留jSonData [i] .name值,我不能這樣做。 – Suz