2015-02-26 45 views
0

我是Jquery的新人,我想了解事件代表團的工作方式。 我想這一點:JQUERY事件代表團問題

$("#32298").on('click',function() { // event delegation 
     alert("df"); 
     var imgs = document.getElementById("32298")[0].src; 
     alert(imgs); 

    }); 

當我點擊這個標識我得到的第一個警報在圖像上,但它不工作的第二個警報。

我在這裏做錯了什麼? 謝謝。

+2

打開控制檯,並檢查錯誤。 – dfsq

+1

'document.getElementById(「32298」)[0]'應該是'document.getElementById(「32298」)'考慮到唯一標識符被提供.. –

+0

var imgs = this.src; – lshettyl

回答

4

如果您想執行事件委託,那麼事件處理函數的第二個參數需要是一個選擇器,以匹配與您想要單擊的元素匹配的元素。

$(document.body).on('click', "#32290", function(event) { 

代碼的問題與事件委託無關。 getElementById返回單個元素(一個id在文檔中必須是唯一的),而不是HTML集合。 (與使用複數元素getElementsByTagNamegetElementsByClassName進行比較。)它不具有0屬性。

var imgs = document.getElementById("32298").src; 
+0

'document.getElementById(「32298」)'就是'this'。 –

+0

@JeremyThille - 這是獲得元素的另一種方法。 – Quentin

+0

爲什麼要提出多餘的dom請求? –

3

由於您使用jQuery的,你可以簡單地使用$(this)構造函數,而不是document.getElementById()

$("#32298").on('click',function() { 
    alert("df"); 
    var imgs = $(this).attr('src'); 
    alert(imgs); 
}); 

對於它的價值,這是不是順便說一下事件委託,它只是綁定事件到一個元素。

如果您必須使用vanilla JS來獲取src屬性,則不需要將索引傳遞給返回值getElementById(),因爲此函數返回DOMObject而不是數組。作爲更新如下:

$("#32298").on('click',function() { 
    alert("df"); 
    var imgs = document.getElementById("32298").src; 
    alert(imgs); 
}); 

另外值得一提的是,ID應該是唯一的,所以#32298應在DOM引用單個元素。我不知道它是否是錯字,但看起來您可能有多個具有相同ID的元素(因爲您使用變量名imgs - 即複數)。

0

你可以試試這個

$("#32298").click(function() { 
    alert("df"); 
var imgs = $(this).attr('src'); 
alert(imgs); 

});