所以,我正在创建我的第一个Web组件,我正在与影子根中的元素进行事件处理。
此组件的目标是显示来自端点的结果列表,用户在输入字段中键入,然后从所选元素中获取文本并将其显示在同一输入字段中。
HTMl是这样的:
<div class="results">
<ul>
<li class="result-item"><i></i><span>Amsterdam</span></li>
<li class="result-item"><i></i><span>Lisbon</span></li>
<li class="result-item"><i></i><span>Paris</span></li>
<li class="result-item"><i></i><span>London</span></li>
<li class="result-item"><i></i><span>Oslo</span></li>
<li class="result-item"><i></i><span>Copenhagen</span></li>
<li class="result-item"><i></i><span>Milan</span></li>
</ul>
</div>
然后查询result-item:
let resultItem = document.querySelector('destination-search').shadowRoot.querySelectorAll('.result-item');
以及将所选值输入到输入中的函数:
function selectTextIntoInput(resultItem, searchInput, shadowRoot) {
for (let i = 0; i < resultItem.length; i++) {
resultItem[i].addEventListener("click", function (event) {
searchInput.value = resultItem[i].innerText;
const destinationEvent = new CustomEvent('destination-search', {
detail: resultItem[i].innerText,
bubbles: true,
composed: true
});
shadowRoot.dispatchEvent(destinationEvent);
});
}
}
我已经检查了控制台,看看我是否查询了结果项字段,它工作正常。问题是点击每一个,将文本选择到输入中,并将其作为一个自定义事件分发给另一个组件使用。
如何处理影子根元素中的单击事件?
2条答案
按热度按时间pcww981p1#
需要在事件中使用composed选项,还需要使用箭头功能
像下面这样的更新代码:-
wdebmtf22#
而不是
<li class="result-item"><i></i><span>Amalfiküste</span></li>
使其成为Web组件
<result-item>
并将所有(交互)逻辑保留在Web组件内