javascript - AddEventListener 事件仅触发一次
问题描述
我正在使用 Django 模板引擎和 JavaScript。我的 HTML 看起来像这样
<p class="content-card__address">{{ z.formatted_address|truncatewords:6 }}</p>
<div class="content-card-inner">
<p class="content-card__review">Отзывы ({{ z.post_relate.all.count }})</p>
<p class="content-card__phone">{{ z.international_phone_number }}</p>
<div class="div-shaddow"></div>
<p class="content-card__text">Показать</p>
</div>
使用模板引擎在后端生成带有文本的卡片。我的 JavaScript 代码只适用于第一张卡片,我需要它适用于所有卡片。使用 JavaScript,我向 div 元素添加了一个类。这是我的 JavaScript
let call = document.querySelector('.content-card__text');
let divShadow = document.querySelector('.div-shaddow');
call.addEventListener('click', clickCall)
function clickCall() {
call.classList.add('visually-hidden');
divShadow.classList.add('visually-hidden');
}
解决方案
此代码返回 DOM 中的第一个元素,并且您仅为它添加点击处理程序
document.querySelector('.content-card__text')
它会为你工作:
const buttons = document.querySelectorAll('.content-card__text');
buttons.forEach(button => {
button.addEventListener('click', clickCall);
});
.divShadow
但也请注意,如果页面上不是单独的元素,则在使用时需要考虑到这一点
更新:基于您的评论的示例
const buttons = document.querySelectorAll('.content-card__text');
const divShadow = document.querySelectorAll('.div-shaddow');
buttons.forEach((button, index) => {
button.addEventListener('click', () => clickCall(index));
});
function clickCall(index) {
buttons[index].classList.add('visually-hidden');
divShadow[index].classList.add('visually-hidden');
}
推荐阅读
- android - 任务 ':expo-constants:compileDebugJavaWithJavac' 执行失败。(反应原生)
- angular - 更改 Angular 7 中的 webpack 配置并更改 CKEditor 5 的 SVG 设置以加载自定义插件
- c++ - 是否可以仅通过在 C++ 中存储分配的指针地址来分析内存?
- spring - 无法使用 Spring Security 加载静态资源
- c - 使用 void* 分配结构
- reactjs - 如何扩展 React 功能组件 Prop 类型?
- sql-server - SQL Server 2017 Management Studio:创建程序集错误
- php - preg_match 函数不适用于 if 语句?
- kubernetes - 创建集群所需的资源量 - Openshift v4.2
- android - 图像在 ImageView 中按大小扭曲