关闭事件委派-DOM父级上的事件侦听器,涵盖给定类的子级/子级

缺口

在jQuery中,您可以执行以下操作:

$('#j_unoffered').on('click', '.icon_del', function () {...

j_unoffered如果icon_del单击具有class的任何后代元素,则会在该元素上放置一个处理程序此外,它适用于任何随后创建的icon_del元素。

我可以在单击元素本身的“关闭”中正常工作。

goog.events.listen(
    goog.dom.getElement('j_unoffered'),  
    goog.events.EventType.CLICK,
    function(e) {...

如何在Closure中指定一个父事件目标,该目标对其子对象/后代对象的工作方式与jQuery示例相同?

我假设我需要使用setParentEventTarget某种方式,但是我不确定如何为DOM事件实现它。我发现的大多数文档都与自定义调度事件有关。

- 更新 -

我想知道这个简单的解决方案是否有任何问题:

goog.events.listen(
    goog.dom.getElement('j_unoffered'),  
    goog.events.EventType.CLICK,
    function(e) {
        if (e.target.className.indexOf('icon_del') !== -1) {...

它仍然保留this与父级绑定,但e.target允许变通方法。listen(opt_handler)中的第五个参数允许您绑定this到其他东西,所以我想这也是一个途径。

托尼

我也不知道这种可能性,所以我建议其他代码:

var addHandler = function(containerSelector, eventType, nestSelector, handler) {
    var parent = goog.isString(containerSelector) ? 
                 document.querySelector(containerSelector) :
                 containerSelector;

    return goog.events.listen(
        parent,
        eventType,
        function(e) {

            var children = parent.querySelectorAll(nestSelector);
            var needChild = goog.array.find(children, function(child) {
                return goog.dom.contains(child, e.target);
            });

            if (needChild)
                handler.call(needChild, e);                

        });
});

用法:

addHandler('#elem', goog.events.EventType.CLICK, '.sub-class', function(e) {
    console.log(e.target);
});

更新

如果您将使用此功能e.target.className.indexOf('icon_del'),则可能会错过正确的事件。考虑一个具有id =的div容器container,它具有几个class的div innerContainer,并且每个容器都包含class =的几个div finalDiv并考虑您将在上面的代码中添加事件处理程序,该代码将检查e.target中的innerContainer类。问题是用户将在finalDiv您的处理程序上单击时会被调用,但事件目标将是finalDiv,而不是innerContainer,但包含在其中。您的代码将丢失它,但它不会。我的代码检查e.target是否具有嵌套类或它包含的类,因此您不会错过此类事件。

opt_handler 也无法真正帮助您,因为您可能想要处理许多嵌套元素(您将在其中传递哪些嵌套元素?也许是全部,但不是很有帮助,您可以随时在事件处理程序中获取它们),而且它们可以在之后动态添加,因此当您添加处理程序时,您可能会不知道它们。

总之,我认为在事件处理程序中执行此类工作是合理且最有效的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

关闭事件委派-DOM父级上的事件侦听器,涵盖给定类的子级/子级

来自分类Dev

父级上的angular 2事件侦听器不会从子级事件中调用

来自分类Dev

向父级展示子级事件

来自分类Dev

父级点击事件与子级点击事件重叠

来自分类Dev

父级点击事件与子级点击事件重叠

来自分类Dev

子级点击事件后如何删除父级

来自分类Dev

单击“子级”元素时,忽略“父级onClick”事件

来自分类Dev

子级点击事件后如何删除父级

来自分类Dev

鼠标移动事件上的鼠标位置设置在父级而不是子级上

来自分类Dev

仅在父级上捕获或取消JS滚轮事件-子级不捕获或取消

来自分类Dev

父级上的事件委派仅适用于某些事件

来自分类Dev

阻止父级直到子级关闭

来自分类Dev

事件委派的问题

来自分类Dev

事件委派麻烦

来自分类Dev

香草JavaScript事件委派

来自分类Dev

委派事件的模式

来自分类Dev

React-如何仅捕获父级的onClick事件而不捕获子级的事件

来自分类Dev

将点击事件注册到给定 div / a 的子级

来自分类Dev

可以绑定到父级的子窗口上的事件吗?

来自分类Dev

就事件回调而言,事件侦听器的优先级在哪里?

来自分类Dev

jQuery在不同的DOM层次结构中委派的事件侦听器-是否会触发适用的事件侦听器?

来自分类Dev

父级可拖动和子级输入类型范围之间的事件冲突

来自分类Dev

被父级删除的子级组件仍会获得商店更改事件

来自分类Dev

将父级中的函数绑定到子级中的鼠标事件以响应(挂钩)

来自分类Dev

如何在select事件中获取剑道菜单的父级和子级文本

来自分类Dev

父级可拖动和子级输入类型范围之间的事件冲突

来自分类Dev

JavaFX:针对父级及其子级的鼠标单击事件

来自分类Dev

angular2 从动态子级到父级发出事件

来自分类Dev

CSS:如何响应父级悬停事件更改子级的背景?

Related 相关文章

  1. 1

    关闭事件委派-DOM父级上的事件侦听器,涵盖给定类的子级/子级

  2. 2

    父级上的angular 2事件侦听器不会从子级事件中调用

  3. 3

    向父级展示子级事件

  4. 4

    父级点击事件与子级点击事件重叠

  5. 5

    父级点击事件与子级点击事件重叠

  6. 6

    子级点击事件后如何删除父级

  7. 7

    单击“子级”元素时,忽略“父级onClick”事件

  8. 8

    子级点击事件后如何删除父级

  9. 9

    鼠标移动事件上的鼠标位置设置在父级而不是子级上

  10. 10

    仅在父级上捕获或取消JS滚轮事件-子级不捕获或取消

  11. 11

    父级上的事件委派仅适用于某些事件

  12. 12

    阻止父级直到子级关闭

  13. 13

    事件委派的问题

  14. 14

    事件委派麻烦

  15. 15

    香草JavaScript事件委派

  16. 16

    委派事件的模式

  17. 17

    React-如何仅捕获父级的onClick事件而不捕获子级的事件

  18. 18

    将点击事件注册到给定 div / a 的子级

  19. 19

    可以绑定到父级的子窗口上的事件吗?

  20. 20

    就事件回调而言,事件侦听器的优先级在哪里?

  21. 21

    jQuery在不同的DOM层次结构中委派的事件侦听器-是否会触发适用的事件侦听器?

  22. 22

    父级可拖动和子级输入类型范围之间的事件冲突

  23. 23

    被父级删除的子级组件仍会获得商店更改事件

  24. 24

    将父级中的函数绑定到子级中的鼠标事件以响应(挂钩)

  25. 25

    如何在select事件中获取剑道菜单的父级和子级文本

  26. 26

    父级可拖动和子级输入类型范围之间的事件冲突

  27. 27

    JavaFX:针对父级及其子级的鼠标单击事件

  28. 28

    angular2 从动态子级到父级发出事件

  29. 29

    CSS:如何响应父级悬停事件更改子级的背景?

热门标签

归档