Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google closure 如何使用单个事件节点将事件分配给多个子DOM元素?_Google Closure_Google Closure Library - Fatal编程技术网

Google closure 如何使用单个事件节点将事件分配给多个子DOM元素?

Google closure 如何使用单个事件节点将事件分配给多个子DOM元素?,google-closure,google-closure-library,Google Closure,Google Closure Library,在我的Google闭包代码中,我想为div中的每个跨度分配一个事件 HTML: 福 酒吧 培根很好吃 闭包Javascript: var container = goog.dom.getElement('container'); var spans = goog.dom.getChildren(container); for (var i = 0; i < spans.length; i++) { eventHandler.listen( spans

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

HTML:


福
酒吧
培根很好吃
闭包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);
        }
  }
var container=goog.dom.getElement('container');
var span=goog.dom.getChildren(容器);
对于(变量i=0;i
尽管如此,此循环似乎效率低下,因为它似乎为每个span元素分配了一个事件节点。当span上的单击事件冒泡到包含的div时,我是否可以为包含的div分配一个事件节点并运行回调函数


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

我从未使用过Google Close,但您已经在使用
e.target
。只需向容器添加一个侦听器,您就可以使用
e.target
获得实际单击的元素

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

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

谢谢,e.target不会返回包含的div吗?您测试过吗?如果闭包会改变target的含义,我会非常惊讶:e.target只有在您单击它时才会返回包含的div,即不是在子对象上,而是在子对象之间的空格上。
var container = goog.dom.getElement('container');

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