
本文旨在解决 JavaScript 实现的购物车数量增减功能仅对页面中第一个元素生效的问题。通过分析常见错误原因,提供了一种更简洁、高效的实现方案,利用 DOM 遍历和 `data` 属性,使得相同的事件处理程序能够适用于所有重复的购物车数量输入控件,同时修复了 HTML结构上的错误。
通常,当使用 JavaScript 操作多个相似的 HTML 元素时,如果选择器使用不当或者事件监听器绑定方式有误,就可能导致代码只对第一个元素生效。例如,使用 document.querySelector() 选择器只会返回匹配的第一个元素,而忽略后续的元素。即使使用 document.querySelectorAll() 获取到所有元素,也需要正确地遍历这些元素并为它们分别绑定事件监听器。
此外,代码中可能存在硬编码的元素 ID 或类名,导致事件处理程序只针对特定的元素生效,而无法通用。
为了解决上述问题,可以采用以下步骤:
立即学习“Java免费学习笔记(深入)”;
以下是优化后的代码示例:
<div class="d-flex align-items-center pls-moins">
<span class="count-number float-right">
<button type="button" class="btn-sm left dec btn btn-outline-secondary pqt-minus" data-inc="-1">
<i class="feather-minus"></i> -
</button>
<span class="cart-button">
<span class="added">0</span>
</span>
<button type="button" class="btn-sm right inc btn btn-outline-secondary pqt-plus" data-inc="1">
<i class="feather-plus"></i> +
</button>
</span>
</div>
<div class="d-flex align-items-center pls-moins">
<span class="count-number float-right">
<button type="button" class="btn-sm left dec btn btn-outline-secondary pqt-minus" data-inc="-1">
<i class="feather-minus"></i> -
</button>
<span class="cart-button">
<span class="added">0</span>
</span>
<button type="button" class="btn-sm right inc btn btn-outline-secondary pqt-plus" data-inc="1">
<i class="feather-plus"></i> +
</button>
</span>
</div>
<div class="d-flex align-items-center pls-moins">
<span class="count-number float-right">
<button type="button" class="btn-sm left dec btn btn-outline-secondary pqt-minus" data-inc="-1">
<i class="feather-minus"></i> -
</button>
<span class="cart-button">
<span class="added">0</span>
</span>
<button type="button" class="btn-sm right inc btn btn-outline-secondary pqt-plus" data-inc="1">
<i class="feather-plus"></i> +
</button>
</span>
</div>
<div class="d-flex align-items-center pls-moins">
<span class="count-number float-right">
<button type="button" class="btn-sm left dec btn btn-outline-secondary pqt-minus" data-inc="-1">
<i class="feather-minus"></i> -
</button>
<span class="cart-button">
<span class="added">0</span>
</span>
<button type="button" class="btn-sm right inc btn btn-outline-secondary pqt-plus" data-inc="1">
<i class="feather-plus"></i> +
</button>
</span>
</div>document.querySelectorAll(".btn-sm").forEach(btn => {
btn.addEventListener('click', e => {
let total = e.target.closest('.pls-moins').querySelector('.added');
total.textContent = Math.max(0, parseInt(total.textContent, 10) + parseInt(e.currentTarget.dataset.inc, 10));
});
});代码解释:
通过统一类名、使用 querySelectorAll()、事件委托和 DOM 遍历,以及利用 data 属性,可以有效地解决 JavaScript 购物车数量增减功能仅对第一个元素生效的问题,并实现更简洁、高效的代码。 此外,请确保 HTML 结构正确,避免出现 div 元素位于 span 元素内部的情况。
以上就是JavaScript 购物车数量增减功能仅对第一个元素生效的解决方案的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号