javascript - 除了第一个按钮外,单击事件不适用于相同的类按钮
问题描述
我正在创建商店应用程序,并且在每个产品都添加到购物车 btn 之后。当我尝试使用该 btn 触发单击事件时,它适用于第一个产品,但不适用于其他产品按钮。数据来自芒果,我在上面使用了哈巴狗。我检查了很多次所有产品按钮都具有相同的类别。
这是html和pug代码
<ul class="posts">
<li class="posts_list">
<div class="posts_list-box1">
<a class="posts_list-box1-link" href="/theme/space-journey-theme"><img class="posts_list-box1-img" src="./img/4.png" alt="Space Journey Theme"></a>
</div>
<div class="posts_list-box2">
<h1 class="posts_list-box2-name">Space Journey Theme</h1>
<h3 class="posts_list-box2-author">by Crippy Themes </h3></div>
<div class="posts_list-box3">
<button class="btn-small btn-small_full" href="/theme/space-journey-theme">More Details</button>
<button class="btn-small btn-small_outline cartBtn" data-id="5e3691dcbd2e3745386aa470">Add to Cart</button>
<h4 class="posts_list-box3-price">$59</h4></div>
</li>
<li class="posts_list">
<div class="posts_list-box1">
<a class="posts_list-box1-link" href="/theme/business-enterpreneur-protfolio"><img class="posts_list-box1-img" src="./img/1.png" alt="Business | Enterpreneur Protfolio"></a>
</div>
<div class="posts_list-box2">
<h1 class="posts_list-box2-name">Business | Enterpreneur Protfolio</h1>
<h3 class="posts_list-box2-author">by Crippy Themes </h3></div>
<div class="posts_list-box3">
<button class="btn-small btn-small_full" href="/theme/business-enterpreneur-protfolio">More Details</button>
<button class="btn-small btn-small_outline cartBtn" data-id="5e3695546dc5fd456c7c7726">Add to Cart</button>
<h4 class="posts_list-box3-price">$29</h4></div>
</li>
</ul>
ul.posts
each data in theme
li.posts_list
.posts_list-box1
a.posts_list-box1-link(href=`/theme/${data.slug}`)
img.posts_list-box1-img(src=`./img/${data.mainImg}` alt=`${data.name}`)
.posts_list-box2
h1.posts_list-box2-name=data.name
h3.posts_list-box2-author by Crippy Themes
.posts_list-box3
button.btn-small.btn-small_full(href=`/theme/${data.slug}`) More Details
button.btn-small.btn-small_outline.cartBtn( data-id=`${data._id}`) Add to Cart
h4.posts_list-box3-price= `$${data.price}
Javascript代码
document.querySelector('.cartBtn').addEventListener('click', () => {
console.log('clicked');
document.querySelector('.bucket').setAttribute('style', ' opacity: 1; visibility: visible; transform: translateY(0)');
})
解决方案
您必须将点击事件分配给所有button.cartBtn
元素,而不仅仅是第一个元素。
querySelector()
返回第一个匹配元素,而querySelectorAll()
返回 a NodeList
。
for(var tL=document.querySelectorAll('.cartBtn'), i=0, j=tL.length; i<j; i++){
tL[i].addEventListener('click', () => {
console.log('clicked');
document.querySelector('.bucket').setAttribute('style', ' opacity: 1; visibility: visible; transform: translateY(0)');
})
};
推荐阅读
- google-apps-script - 恢复 Excel 文件的修订版 - Drive API
- java - 用于私人参考和地图的 Junit 测试用例
- node.js - NodeJS:使用 res.writeHead 的重定向缺少标头授权
- python - Discord py 在命令中添加角色
- entity-framework - 带有视图模型的 Asp.net 核心 PaginatedList
- java - 无法在类中创建属性
- java - 如何在 GUI 中的标签旁边制作文本字段
- batch-processing - 如何每天自动删除不同工作的多个 GDG 代?
- vector - 从一个向量复制到另一个向量
- python - 如何在python中捕获copytree的异常