如何用纯javascript编写这个jquery字符串?
如何用纯javascript编写这个jquery字符串?我用注释标记了字符串如何用纯javascript编写这个jquery字符串?,javascript,jquery,Javascript,Jquery,如何用纯javascript编写这个jquery字符串?我用注释标记了字符串 function loadGoods() { $.getJSON('goods.json', function (data) { var out = ''; for (var key in data){ out+='<div class="single-goods">'; out+='<h3>'+data[k
function loadGoods() {
$.getJSON('goods.json', function (data) {
var out = '';
for (var key in data){
out+='<div class="single-goods">';
out+='<h3>'+data[key]['name']+'</h3>';
out+='<img src="'+data[key].image+'">';
out+='<p>Price: '+data[key]['cost']+'</p>';
out+='<button class="add-to-cart" data-art=" '+key+' "> buy</button>';
out+='</div>';
}
document.getElementById('goods').innerHTML = out;
$('button.add-to-cart').on('click', addToCart); // this string
});
}
该按钮仅通过单击第一张产品卡来捕获事件,但其他产品卡按钮不会捕获按钮单击事件,也不会将项目添加到购物车
addToCart-为了更好地理解,我将在下面编写的函数
函数addToCart:
function addToCart() {
var articul = this.getAttribute('data-art');
if (cart[articul]!=undefined) {
cart[articul]++;
}
else {
cart[articul] = 1;
}
localStorage.setItem('cart', JSON.stringify(cart) );
showMiniCart();
}
querySelector将返回集合的第一个,而如果使用正确的选择器,querySelector将返回所有按钮 所以 但是您可以从容器中进行委托 即使在jQuery中,这也是一个好主意,因为按钮是动态添加的 i、 e 变成
document.getElementById('#goods').addEventListener('click', addToCart);
以及功能
function addToCart(e) {
var tgt = e.target;
if (!tgt.matches("button.add-to-cart")) return;
var articul = tgt.getAttribute('data-art');
if (cart[articul]) cart[articul]++;
else cart[articul] = 1;
localStorage.setItem('cart', JSON.stringify(cart) );
showMiniCart();
}
querySelector将返回集合的第一个,而如果使用正确的选择器,querySelector将返回所有按钮 所以 但是您可以从容器中进行委托 即使在jQuery中,这也是一个好主意,因为按钮是动态添加的 i、 e 变成
document.getElementById('#goods').addEventListener('click', addToCart);
以及功能
function addToCart(e) {
var tgt = e.target;
if (!tgt.matches("button.add-to-cart")) return;
var articul = tgt.getAttribute('data-art');
if (cart[articul]) cart[articul]++;
else cart[articul] = 1;
localStorage.setItem('cart', JSON.stringify(cart) );
showMiniCart();
}
函数addToCart(项){
console.log('clicked'+item.target.getAttribute('data-art'));
}
(功能(){
var buttons=document.queryselectoral(“button.add-to-cart”);
按钮。forEach(功能(项目、索引){
item.addEventListener(“单击”,addToCart);
});
})()
购买
购买
购买
购买
函数addToCart(项){
console.log('clicked'+item.target.getAttribute('data-art'));
}
(功能(){
var buttons=document.queryselectoral(“button.add-to-cart”);
按钮。forEach(功能(项目、索引){
item.addEventListener(“单击”,addToCart);
});
})()
购买
购买
购买
购买
查询选择器
只返回一个元素。使用querySelectorAll
querySelector
只返回一个元素。使用querySelectorAll
。这是一个更聪明的答案,但是海报不会知道为什么,除非你告诉他为什么以及这是什么。多对一,,etc@oligofren请看我在你发表评论时写的更新。这是一个更聪明的答案,但除非你告诉他为什么以及这是怎么回事,否则海报不会知道原因。多对一,,etc@oligofren请查看我在您发表评论时编写的更新。您可以在列表中调用addEventListener吗?@mplungjan稍微更改了我的代码以使其更清晰。但是您的解决方案非常优雅:)我的意思是:item.addEventListener(“单击”,函数(e){addToCart(this);},false)代码>可以写入项。addEventListener(“单击”,addToCart)代码>@mplungjan哦,我现在明白了。我已经更新了答案。谢谢你的更正:)你能在列表中调用addEventListener吗?@mplungjan稍微修改了我的代码,使之更干净。但是您的解决方案非常优雅:)我的意思是:item.addEventListener(“单击”,函数(e){addToCart(this);},false)代码>可以写入项。addEventListener(“单击”,addToCart)代码>@mplungjan哦,我现在明白了。我已经更新了答案。谢谢你的更正:)
function addToCart(e) {
var tgt = e.target;
if (!tgt.matches("button.add-to-cart")) return;
var articul = tgt.getAttribute('data-art');
if (cart[articul]) cart[articul]++;
else cart[articul] = 1;
localStorage.setItem('cart', JSON.stringify(cart) );
showMiniCart();
}