【发布时间】:2019-06-19 14:13:51
【问题描述】:
我刚刚遇到了一个有趣的情况,我在放置在 <form> 内的原生自定义元素的 Shadow DOM 内提交了 <button>。
<form id="one" action="" method="get">
<s-button>Select</s-button>
#shadow-root
<button>...</button>
<button>Outside</button>
</form>
我还有一个<button> 作为<form> 的直系子代。
子 <button> 导致表单提交。
但 shadow-root 中的 <button> 没有。
在某种程度上,我想这是有道理的。但是有没有人想出一种方法来告诉 shadow-root <button> 与 <form> 正常工作,或者这是我必须通过 JS 处理的事情?
我知道点击事件在 Shadow DOM 层被阻止,但令我惊讶的是,没有办法让按钮仍然是表单的一部分,可以通过属性或属性进行设置。
当然,我可以捕获点击事件,然后从this 发送一个新事件,但这不会做同样的事情,因为我的事件将不再是用户生成的,并且有大量与之相关的规则。
【问题讨论】:
-
他们在 V2 中处理的 shadowDOM 和表单存在更多问题。请阅读/关注:github.com/w3c/webcomponents/issues/187
-
并且(从几年前开始)Supersharps 对将 shadowDOM 输入复制到主 DOM 的回答:stackoverflow.com/questions/38623176/…
-
点击/提交时:来自the submit Event documentation:“提交事件仅在用户单击表单中的提交按钮[..]时触发。调用form.submit时不会引发该事件() 方法直接。"
标签: shadow-dom custom-element native-web-component