无法在动态创建的元素上绑定函数

时间:2014-03-06 08:39:07

标签: javascript jquery

我正在用javascript创建一个简单的购物车,没有按钮的购物车会删除一个项目是什么?

购物车是使用javascript即时创建的,因此页面加载时不会存在元素。但是,这应该不是问题吗?

$(".removeFromCart").on("click",function(e){
    alert("GO AWAY PLEASE..");
    var tuoteID = $(this).attr("data-id");
    deleteFromCart(tuoteID);
});

元素(动态创建)看起来像这样:

<a href="#" class="removeFromCart" data-id="2">×</a>

但它不会触发。如果我将.replaceFromCart替换为p,则每次点击某个段落时都会触发。

这不是我第一次遇到.on()的问题而且总是需要一半的头发来解决,所以也许有经验的人可以指出我做错了什么。

1 个答案:

答案 0 :(得分:2)

您需要使用其他版本的jQuery on()函数进行事件委派。您必须为执行绑定代码的时间提供静态父级,或者您可以委派给bodydocument

$(document).on("click",".removeFromCart", function(e){
    alert("GO AWAY PLEASE..");
    var tuoteID = $(this).attr("data-id");
    deleteFromCart(tuoteID);
});
  

委派事件的优势在于它们可以处理来自的事件   稍后添加到文档中的后代元素。通过   选择一个保证在当时存在的元素   委托事件处理程序附加,您可以使用委托事件   避免频繁附加和删除事件处理程序jQuery doc