Shadowroot:没有获得事件侦听器的正确目标
Shadowroot : Not getting the correct target for event listener
我有一个带有模式的网页,在 shadowroot 下有一个自定义下拉菜单,如下所示:
<div id="main">
#shadow-root
<div class="modal fade in" id="sample-modal">
<div class="modal-dialog modal-xl" role="dialog" aria-hidden="true">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title" style="font-size:0.85rem" id="download-modal-label">Modal Title</h6>
</div>
<form onsubmit="return false;">
<div class="modal-body" id="modal-body" style="overflow: inherit !important">
<div class="dropdown">
<button onclick="myFunction()" class="dropbtn">Dropdown</button>
<div id="myDropdown" class="dropdown-content">
<input type="text" placeholder="Search.." id="myInput" onkeyup="filterFunction()">
<a href="#about">About</a>
<a href="#base">Base</a>
<a href="#blog">Blog</a>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
为此,我想添加一个事件侦听器,如果我单击下拉列表以外的任何地方,我将隐藏下拉列表 div。为此,我添加了事件监听器如下:
let root = document.getElementById("main").shadowRoot;
$(root).on("click", function(e) {
var clickedOn=$(e.target);
});
但这似乎根本不起作用。我尝试将点击事件监听器附加到文档,以检查事件目标如下:
$(document).on("click", function(e) {
var clickedOn=$(e.target);
});
此事件监听器被触发,但目标元素 'e' 它显示为 <div id="main">
无论我是否单击任何元素,包括模态下的下拉元素。如何在使用 'click' 事件侦听器单击的 shadowRoot 下获得正确元素的地方添加事件侦听器?
使用addEventListener
root.addEventListener("click", function(e) {
var clickedOn=$(e.target);
});
我有一个带有模式的网页,在 shadowroot 下有一个自定义下拉菜单,如下所示:
<div id="main">
#shadow-root
<div class="modal fade in" id="sample-modal">
<div class="modal-dialog modal-xl" role="dialog" aria-hidden="true">
<div class="modal-content">
<div class="modal-header">
<h6 class="modal-title" style="font-size:0.85rem" id="download-modal-label">Modal Title</h6>
</div>
<form onsubmit="return false;">
<div class="modal-body" id="modal-body" style="overflow: inherit !important">
<div class="dropdown">
<button onclick="myFunction()" class="dropbtn">Dropdown</button>
<div id="myDropdown" class="dropdown-content">
<input type="text" placeholder="Search.." id="myInput" onkeyup="filterFunction()">
<a href="#about">About</a>
<a href="#base">Base</a>
<a href="#blog">Blog</a>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
为此,我想添加一个事件侦听器,如果我单击下拉列表以外的任何地方,我将隐藏下拉列表 div。为此,我添加了事件监听器如下:
let root = document.getElementById("main").shadowRoot;
$(root).on("click", function(e) {
var clickedOn=$(e.target);
});
但这似乎根本不起作用。我尝试将点击事件监听器附加到文档,以检查事件目标如下:
$(document).on("click", function(e) {
var clickedOn=$(e.target);
});
此事件监听器被触发,但目标元素 'e' 它显示为 <div id="main">
无论我是否单击任何元素,包括模态下的下拉元素。如何在使用 'click' 事件侦听器单击的 shadowRoot 下获得正确元素的地方添加事件侦听器?
使用addEventListener
root.addEventListener("click", function(e) {
var clickedOn=$(e.target);
});