Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.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
Javascript jQuery/deep/delegation_Javascript_Jquery_Web Component_Shadow Dom - Fatal编程技术网

Javascript jQuery/deep/delegation

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()

使用webcomponents,您可以使用
/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”)
几乎相同,至少在这种情况下是如此。如果事件不向一方冒泡,它们也不会向另一方冒泡。