javascript - 如何通过 eventlistener 从 document.queryselectorall() 中选择所有子项
问题描述
const modalTriggers = document.querySelectorAll(".modal-trigger");
modalTriggers.forEach((modalTrigger) => {
modalTrigger.addEventListener("click", (clickEvent) => {
const trigger = clickEvent.target;
const modalId = trigger.getAttribute("data-modal-id");
openModal(modalId);
});
});
<button class="modal-trigger bg-brandPrimary-500 rounded-full p-8 shadow-custom text-white" data-modal-id="openFilterDialog"><span><i data-feather="layers" ></i></span></button>
当我点击#span #i 时,它不会触发data-modal-id,但是当我点击#button 时,它会触发data-modal-id。如果我们单击按钮跨度或 I,触发 data-modal-id 的可能方法是什么?谁可以帮我这个事?
解决方案
只需使用您已经存在的 modalTrigger 变量而不是查看目标。
const modalTriggers = document.querySelectorAll(".modal-trigger");
modalTriggers.forEach((modalTrigger) => {
modalTrigger.addEventListener("click", () => {
const modalId = modalTrigger.getAttribute("data-modal-id");
openModal(modalId);
});
});
另一种解决方案是使用 CSS pointer-events禁用子元素上的点击事件:
.modal-trigger * {
pointer-events: none;
}
推荐阅读
- peoplesoft - BI Publisher 条件字段屏蔽
- dialogflow-es - AOG Dialogflow Fulfillment - PHP Webhook 响应 null
- angular - Angular 6 + Spring Boot。地址栏中没有 index.html 的应用程序外观错误
- c# - Restful API 从 Post 请求返回 404 且未生成令牌
- python - 用 Python 和 Beautiful Soup 分割抓取的文本
- clojure - 写一个给定键和映射的函数时,“true”有什么用,返回“true”
- sql - 在 SQL 中编辑字符串列 - 删除分隔符之间的部分
- python - 子类使用@property重新定义属性时如何修复mypy签名
- jquery - Neo4j:如何拥有'|' 在csv中导出数据时作为分隔符?
- zend-framework - 在zend学说中找不到行时如何修改错误