2012-07-26 50 views
3

在我的Google Closure代碼中,我想要爲div中的每個跨度分配一個事件。如何使用單個事件節點將事件分配給多個子DOM元素?

HTML:

<div id="container"> 
    <span>foo</span> 
    <span>bar</span> 
    <span>bacon is delicious</span> 
    </div> 

封閉性JavaScript:

var container = goog.dom.getElement('container'); 
    var spans = goog.dom.getChildren(container); 
    for (var i = 0; i < spans.length; i++) { 
    eventHandler.listen(
     spans[i], 
     goog.events.EventType.CLICK, 
     function (e) { 
      doSomeStuff(e.target); 
     } 
    } 

這個循環似乎效率不高,但因爲它似乎一個事件節點分配給每一個span元素。我可以以某種方式將單個事件節點分配給包含div,並且在跨度上的點擊事件冒泡到包含div時使回調函數運行?

在jQuery中,我相信live()delegate()函數之間的區別與我在這裏處理的問題是平行的。

回答

3

我從來沒有使用Google Closure,但您已經在使用e.target。通過將一個監聽器添加到容器中,您可以使用e.target來獲取實際單擊的元素。

var container = goog.dom.getElement('container'); 

eventHandler.listen(
    container, 
    goog.events.EventType.CLICK, 
    function (e) { 
     doSomeStuff(e.target); 
    }); 
+0

謝謝,不會e.target返回包含div但? – dangerChihuahua007 2012-07-26 17:39:55

+0

你測試了嗎?如果Closure會改變目標的含義,我會感到非常驚訝:https://developer.mozilla.org/en/DOM/event.target – Prinzhorn 2012-07-26 17:58:58

+0

e.target僅當您點擊它時纔會返回包含div,即不在孩子身上,但在孩子之間的空間。 – Prinzhorn 2012-07-26 18:00:12

相關問題