javascript - jQuery 函数不可逆。[网站购物车功能]
问题描述
我对 jQuery 世界很陌生,并且在尝试添加到网站的购物车功能方面遇到了一些困难。
我创建了一个函数来向购物车添加一个元素(基于它的 id)。这工作正常。但是,当我尝试反转它时(比如有人再次单击购物车图标以将其删除),购物车数量会增加更多,并且课程不会变回。
您将在我的代码中看到我正在更改视觉表示的类(未选择 = 没有填充的 svg 和已选择的 = 带填充的 svg)。
我曾尝试切换课程,删除和添加课程,但我想不出更多。任何帮助将不胜感激!
$(document).ready(function() {
var cart = [];
$("a.addToCart").click(function(event) {
var pressedId = event.target.id;
$("#cart_button").removeClass("hidden");
$("#" + pressedId).removeClass("addToCart");
$("#" + pressedId).addClass("addedToCart");
cart.push(pressedId)
$('.cart--counter').html(cart.length);
});
});
$(document).ready(function() {
$("a.addedToCart").click(function(event) {
var unpressedId = event.target.id;
$("#" + unpressedId).addClass("addToCart");
$("#" + unpressedId).removeClass("addedToCart");
cart.splice( $.inArray(unpressedID,cart) ,1 );
$('.cart--counter').html(cart.length);
});
});
这是一个带有类和 ID 的 HTML 示例。
<a id="12" class="addToCart">
Again, for clarification: the class changes appropriately from "addToCart" to "addedToCart" but is not reversible & the array is successfully updated with appropriate "ID" but can not be removed again.
解决方案
Your issue is that when you add your event handlers, there are no elements with class addedToCart
, so no event handlers get assigned. You need to use a delegated event handler instead:
var cart = [];
$(document).ready(function() {
$(document).on('click', "a.addToCart", function(event) {
var pressedId = event.target.id;
$("#cart_button").removeClass("hidden");
$("#" + pressedId).removeClass("addToCart");
$("#" + pressedId).addClass("addedToCart");
cart.push(pressedId)
$('.cart--counter').html(cart.length);
$('#cart').html(cart.toString());
});
});
$(document).ready(function() {
$(document).on('click', "a.addedToCart", function(event) {
var unpressedId = event.target.id;
$("#" + unpressedId).addClass("addToCart");
$("#" + unpressedId).removeClass("addedToCart");
cart.splice($.inArray(unpressedId, cart), 1);
$('.cart--counter').html(cart.length);
$('#cart').html(cart.toString());
});
});
.hidden {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a id="12" class="addToCart">Item 12</a><br />
<a id="13" class="addToCart">Item 13</a>
<div class="cart--counter">**</div>
<br />
<div id="cart"></div>
<br />
<div id="cart_button" class="hidden">cart button</div>
推荐阅读
- javascript - 尝试在 IE11 中提交表单,但它不起作用
- javascript - 方括号中的对象成员标识符
- python - python - 如何将自定义元素的倍数附加到Python中的列表?
- database - 主键理论与 I/O 效率
- spring-integration - 为什么消息卡在聚合器上?
- windows - 在带有 IIS 站点的 Windows 上,出现 http 错误 403
- php - 如何在 php 中将原始 xml 文件显示到 Web 浏览器
- javascript - 带有 Rollup.js 的 Vue.js 呈现 html 注释而不是 Vue html
- javascript - 为什么更改文本字符串格式会产生不同的日期时区?
- python - 如何处理这个异常?'错误:无法卸载'wrapt'。这是一个 distutils 安装的项目等。