2012-07-26 37 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

相关问题