在每次迭代中使用jquery在一个手柄中选择元素
Select element with jquery inside a handlebars each iteration
我正在做一个电子商店。我在HTML中显示一个产品列表,使用手柄。
对于每个元素,我都添加了一个按钮,允许用户在购物车中添加商品。它不工作,因为每次我点击按钮,我添加了所有的列表,而不仅仅是一个对象。
所以我知道我正在传递所有的列表(因为我传递'list'作为参数),我想知道如何只传递每个按钮的当前项。我不知道该怎么做。
html: <div class="container-fluid">
<script id="list-items" type="text/x-handlebars-template">
{{#each list}}
<div class="items col-lg-3 col-md-4 col-sm-6 col-xs-12">
Category: {{ category}} </br>
Name: {{ name }} </br>
Price: {{ price }} </br>
Quantity: {{ quantity }}
<button class="addItem" class="btn">Buy</button>
</div>
{{/each}}
</script>
</div>
javascript: var ShoppingCart = function () {
this.cart = [];
};
ShoppingCart.prototype.addItem = function(item) {
this.cart.push(item);
};
shoppingCart = new ShoppingCart();
$('.addItem').click(function() {
shoppingCart.addItem(list);
});
在你的click函数中,你添加了整个列表:
shoppingCart.addItem(list);
并且您不需要转移要添加的整个项目。因为在作用域中已经有了整个列表,所以只需要让函数知道选择的索引是什么。可能的解决方案是在按钮id中添加把手索引,然后在jQuery中解析它,然后继续进行,或者考虑用纯javascript解决方案取代jQuery订阅点击事件的方式,并在把手的帮助下插入项目的索引,如下所示:
<button class="addItem" class="btn" onclick="addItem({{@index}})">Buy</button>
其中addItem
为:
function addItem(index) {
shoppingCart.addItem(list[index]);
}
我想你可以用一个项目ID(或索引)来排序:
<button id="{{ @index }}" class="addItem" class="btn">Buy</button>
$('.addItem').click(function() {
shoppingCart.addItem(list[$(this).id]);
});
相关文章:
- 使用clickToggle并在单击另一个元素时关闭元素
- 表追加而不附加最后一个元素
- 滚动到容器中的下一个元素-几乎到了
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 使用CSS或js,使用动态选择器选择任意li的下一个元素
- 按我自己的类克隆另一个元素的内容和顺序
- Javascript获取上一个元素的内容
- 如何通过HTML+CSS中的另一个元素Selector更改元素的属性值
- 在数组中的一个元素上设置多个值
- 指令的模板必须只有一个根元素:With restrict E&替换true
- HTML JavaScript,我如何能够通过给每个元素一个不同的Id来使用JavaScript使这个函数工作
- 如何创建一个独立的 DOM 元素?一个不从父母那里继承 css 等
- 如何给图像元素一个“;选择“;使用Raphael.js查看
- 如何显示隐藏的
- 元素一个接一个或全部同时
- 使用"span"创建一个自定义的基于web的文本编辑器;元素——一个坏主意
- 引导旋转木马传递元素一个接一个
- 给所有元素一个匹配数组内容的ID
- 我如何得到Json数组元素一个接一个的jquery上不同的id'
- 一次淡入附加元素一个
- 如何使用AngularJS检索外部网站的内容(一个元素一个元素)