2013-01-02 76 views
1

我正在顯示陣列中的圖像。我希望用戶能夠從數組中選擇一個圖像並替換表中的當前圖像img.src。當單擊一個單元格時,我已經設法向用戶顯示圖像選擇,但不確定從這裏開始的位置。我已經嘗試了數組圖像上的clickhandler,但警報僅在單擊數組中最後一個圖像時顯示。困惑。所有幫助讚賞。使用陣列onclick中的圖像更改節點圖像

function addImage (col) { 
var img = new Image(); // Note that a new img variable will be declared each time this function is called 
img.src = "../www/images/TEST.png"; 
col.appendChild(img); 
img.onclick = function() { 
    var myImages = new Array(); 
    myImages[0] = "../www/images/TEST3.png"; 
    myImages[1] = "../www/images/TEST2.png"; 
    myImages[2] = "../www/images/TEST4.png"; 

    for (var i = 0; i < myImages.length; i++) { 
     var allImages = new Image(); 
     allImages.src=myImages[i]; 


     var newList = document.createElement("ul"); 
     var newContent = allImages; 
     newList.appendChild(newContent); 
     my_div = document.getElementById("showPics"); 
     document.body.insertBefore(newList, my_div); 
     }; 

     allImages.onclick = function(){ 

     alert("the click is working");//it is but only for the last image...grrrrr 
     }; 
     //this.src = ????; 
     }; 
     }; 

    for (r = 0; r < howOften; r++) { 
    row = table.insertRow(-1); 
    for (c = 0; c < numDays; c++) { 
    col = row.insertCell(-1); 
    addImage(col); 
    }; 
    }; 
    document.getElementById('holdTable').appendChild(table); 
    }; 
+0

無關的建議...沒有理由在你的塊中關閉'}'之後加入';'。使醜陋的代碼恕我直言。 – ic3b3rg

+0

你的觀點值得注意的是 – Inkers

回答

2

對於初學者,您需要將您的點擊分配你的循環中:

function addImage(col) { 
    var img = new Image(); // Note that a new img variable will be declared each time this function is called 
    img.src = "../www/images/TEST.png"; 
    col.appendChild(img); 
    img.onclick = function() { 
     var myImages = new Array(); 
     myImages[0] = "../www/images/TEST3.png"; 
     myImages[1] = "../www/images/TEST2.png"; 
     myImages[2] = "../www/images/TEST4.png"; 

     for (var i = 0; i < myImages.length; i++) { 
      var allImages = new Image(); 
      allImages.src = myImages[i]; 


      var newList = document.createElement("ul"); 
      var newContent = allImages; 
      newList.appendChild(newContent); 
      my_div = document.getElementById("showPics"); 
      document.body.insertBefore(newList, my_div); 
      allImages.onclick = function(e) { 
       img.src = e.target.src; 
      }; 

     }; 

     //this.src = ????; 
    }; 
}; 

for (r = 0; r < howOften; r++) { 
    row = table.insertRow(-1); 
    for (c = 0; c < numDays; c++) { 
     col = row.insertCell(-1); 
     addImage(col); 
    }; 
}; 
document.getElementById('holdTable').appendChild(table); 
}; 

...但你必須將每一個圖像被點擊時重新分配你的點擊處理程序的代碼,以及重新創建您的DOM(HTML)元素。您可能需要考慮在後續點擊中隱藏/顯示my_div

+0

嗨格林,我一直在試圖弄清楚hide();和show();方法。 my_div.show();不適合我。我知道我想用img.onclick顯示div,然後在用戶選擇圖像後隱藏它。然而,當我們實施它時,我很難過。你能指出我的任何好例子,大多數似乎使用jQuery。 – Inkers

+0

另一個問題是,當圖像被點擊時,它會成功地將圖像傳回img.src,但我只是再次出現TEST4.png。 – Inkers

+0

如果你正在避免jQuery,隱藏將'my_div.style.display ='none';',顯示將'my_div.style.display ='塊';' – Grinn