3

在我的 Google Closure 代码中,我想为 div 中的每个跨度分配一个事件。

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);
        }
  }

这个循环似乎效率低下,因为它似乎为每个跨度元素分配了一个事件节点。我可以以某种方式将单个事件节点分配给包含 div,并在跨度上的单击事件冒泡到包含 div 时运行回调函数吗?

live()在 jQuery 中,我相信和函数之间的区别与delegate()我在这里处理的问题相似。

4

1 回答 1

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);
    });
于 2012-07-26T15:11:06.250 回答