Javascript jQuery/deep/delegation
使用webcomponents,您可以使用Javascript jQuery/deep/delegation,javascript,jquery,web-component,shadow-dom,Javascript,Jquery,Web Component,Shadow Dom,使用webcomponents,您可以使用/deep/,以shadowdom的内部元素为目标,在我尝试使用事件委派之前,这一切都很正常 常规单击功能将起作用: $('html /deep/ a').on('click', function(e) { e.preventDefault() console.log('foo') }) 授权似乎没有效果: $('html').on('click', '/deep/ a', function(e) { e.preventDefault()
/deep/
,以shadowdom的内部元素为目标,在我尝试使用事件委派之前,这一切都很正常
常规单击功能将起作用:
$('html /deep/ a').on('click', function(e) {
e.preventDefault()
console.log('foo')
})
授权似乎没有效果:
$('html').on('click', '/deep/ a', function(e) {
e.preventDefault()
console.log('bar')
})
知道在这里做什么吗?阴影DOM将事件重定目标,使其看起来像来自宿主元素。这是为了保留封装模型(否则您可能会抓住目标并在组件内部捣乱)
也许您可以尝试委托给主机元素,然后使用
event.path
来确定是否单击了a
?我认为事件不会从web组件中冒泡出来(至少在默认情况下是这样),因此委托无法工作。还没有尝试过,但我猜元素会冒泡到ShadowRoot
,并且没有进一步,因此,将处理程序附加到
可能是无用的。好问题,@darylcan您不能将点击处理程序添加到聚合元素本身吗?@Todd我认为$(文档)
与$(“html”)
几乎相同,至少在这种情况下是如此。如果事件不向一方冒泡,它们也不会向另一方冒泡。