如何收听在子元素的影子dom中触发的事件?

安德烈亚斯

我有两个Web组件,一个是列表项,另一个是容器。在列表项中,有一个按钮,该按钮调度onclick事件。两个组件均使用独立的影子球。

<custom-list>
        <custom-list-item></custom-list-item>
        <custom-list-item></custom-list-item>
        <custom-list-item></custom-list-item>
</custom-list>

如何在“自定义列表”中侦听“自定义列表项”中的按钮发出的事件?

超锐利

在容器custom元素中<custom-list>,只需侦听clickShadow DOM根目录上的元素。click内部Shadow DOM中的元素发出事件自然会冒泡到其容器。

this.shadowRoot.addEventListener( 'click', ev => console.log( ev.target.id ) )

您还可以实现该handleEvent()方法来处理自定义元素中管理的所有事件:

customElements.define( 'custom-list-item', class extends HTMLElement {
    constructor() {
        super()
        this.attachShadow( { mode: 'open' } )
            .innerHTML = `<button>Click</button>`             
    }  
} )

customElements.define( 'custom-list', class extends HTMLElement {
    constructor() {
        super() 
        this.attachShadow( { mode: 'open' } )
            .innerHTML = `
                <custom-list-item id=1></custom-list-item>
                <custom-list-item id=2></custom-list-item>
                <custom-list-item id=3></custom-list-item>` 
        this.shadowRoot.addEventListener( 'click', this )
    }
    handleEvent( ev ) {
        console.log( ev.target.id )
    }
} )
<custom-list></custom-list>

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何遍历影子DOM中的元素

在影子DOM中查找元素

访问影子DOM中的元素

如何在HTML的影子DOM中添加子级?

如何收听在Vue JS中以编程方式创建的子事件?

如何收听调度员触发的事件

在angularjs中如何访问触发事件的元素?

是否可以将事件侦听器绑定到来自外部脚本的影子dom中的元素?

jQuery-从DOM中删除元素时触发事件

从dom中删除任何元素后,Touchmove事件停止触发

在Firefox中禁用元素后,不会触发DOM事件

如何访问元素内部两个影子dom

如何禁用由子元素触发的mouseout事件?

为什么getElementsByClassName()访问影子DOM中的元素?

引发事件时,如何从DOM中删除(不隐藏)Angular子元素?

在更改事件中隐藏元素时如何停止触发事件

在由轻型DOM中的元素(不是父级)覆盖的阴影DOM元素上触发事件

在Angular中收听自定义DOM事件

如何在事件上创建DOM元素,然后阻止事件处理程序在DOM元素存在之前触发?

如何在JavaScript中动态更改的元素中触发事件

将元素添加到子元素会触发父元素中的drop事件

如何收听房间事件

收听iFrame中的事件

如何在componentDidMount中触发子组件事件

如何在子组件中触发点击事件?

在子元素上反应onMouseEnter事件触发

响应子元素的 onClick 事件触发

如何在Polymer中的元素上触发事件?

如何查看Chrome DevTools中某个元素上触发的事件?