我有一个购物车应用程序的多个按钮(由
PHP生成):
<button class="addtocart" id="<?PHP echo $code; ?>">
<span id="addtocartbutton">Add to cart</span>
</button>
我想使用功能更新我的购物车:
function AddtoCart() {
alert("Added!");
}
后来,我想找到由调用它的按钮创建的id($code)(不知道该怎么做,但也许这是另一个问题).所以我尝试了这个:
document.getElementsByClassName("addtocart").addEventListener("click",AddtoCart());
但它不起作用.它使用onclick工作,但我理解通过创建EventListener来实现它的正确方法.另外,我不能在jQuery中使用on()函数,因为我被迫使用没有它的jQuery Version 1.6.
我看过https://stackoverflow.com/a/25387857/989468并且我无法将它真正地分配给作为p标签的父节点,因为我显然不希望为p标签中的其他元素分配此函数.
解决方法
虽然给出的答案是正确的,但还有另一种方法:
Event Delegation
将侦听器附加到SINGLE事物,在这种情况下是文档正文,然后检查以查看实际单击的元素:
警告:即时输入:未经测试
// Only needed *once* and items may be added or removed on the fly without
// having to add/remove event listeners.
document.body.addEventListener("click",addtoCart);
function addtoCart(event) {
var target = event.target;
while(target) {
if (target.classList.contains('addtocart')) {
break;
}
// Note: May want parentElement here instead.
target = target.parentNode;
}
if (!target) {
return;
}
var id = target.dataset.id;
alert(id + " added!");
}