2017-10-12 66 views
0

我想將事件添加到文檔中的每一個形象,這是代碼:無法在陣列循環綁定事件到每個項目

let images = document.getElementsByTagName("img") 
const self = this; 
for (var img of images) { 
    img.onclick = function(e) { 
     e.stopPropagation(); 
     if (!e.target.src) { 
     return; 
     } 
     self.source = e.target.src; 
     self.alt = e.target.alt; 
    } 
} 

我登錄的所有圖像,並發現只有最後圖像有點擊事件。我曾嘗試將images轉換爲數組,並使用forEach方法,獲得了相同的結果。這是怎麼回事? 順便說一下,我在Vue的mounted鉤子方法中這樣做。

+1

的代碼是完全正常。 –

+0

似乎所有的圖像都有點擊事件。 –

+0

什麼是'this'這裏'const self = this;'? – adiga

回答

1

將事件附加到多個DOM元素的最佳方法是使用Event Delegation。您應該將event附加到父元素,並檢查target元素是否爲img or not。然後您可以訪問圖像的srcalt屬性。

var images = document.querySelector('.images'); 
 
images.onclick = function(e) { 
 
    if(e.target.tagName === 'IMG') { 
 
    console.log(e.target.src +" : " + e.target.alt); 
 
    } 
 
}
<div class="images"> 
 
    <img alt="1" src="https://randomuser.me/api/portraits/men/83.jpg" /> 
 
    <img alt="2" src="https://randomuser.me/api/portraits/med/men/83.jpg" /> 
 
    <img alt="3" src="https://randomuser.me/api/portraits/thumb/men/83.jpg" /> 
 
</div>

+0

這確實是最好的方法。我認爲值得注意的是,對於匹配_non-empty_ HTML元素,應該遍歷'e.target'的管理節點樹直到找到匹配。 –

+0

是的。但是對於我在這裏使用事件代表團的項目來說,這有點粘性。 –