使用Jquery动态创建的元素?

时间:2013-04-11 21:02:33

标签: javascript jquery

我的简单脚本通过jquery附加了一些元素 我想要做的是为那些创建的元素添加一些ajax调用 问题是事件永远不会对这些元素起作用,我尝试了很多Jquery方法,但都失败了。

$("#currentbuild").append('<li class="cancelevent"></li>');
$('.cancelevent').bind("click",function(e) {
                        var eventid = $(this).attr('id');
                        e.preventDefault();
                        alert(eventid);
                })

我也试过

$("#currentbuild").append('<li class="cancelevent"></li>');
$('.cancelevent').on("click",function(e) {
                        var eventid = $(this).attr('id');
                        e.preventDefault();
                        alert(eventid);
                })

但它从未显示任何内容

1 个答案:

答案 0 :(得分:1)

你几乎是正确的:

$("#currentbuild").append('<li class="cancelevent"></li>');
$('#currentbuild').on("click",".cancelevent",function(e) {
    var eventid = $(this).attr('id');
    e.preventDefault();
    alert(eventid);
});

这为click添加了一个#currentbuild处理程序(它不是动态的,因此总是在DOM中)。但是,它不是对自身的点击做出反应,而是仅侦听自身内部的点击,而只监听类cancelevent的元素。由于您没有向可能动态添加和/或删除的元素添加点击处理程序,因此处理程序将始终存在。

编辑:正如@tcovo在下面的评论中指出的那样,你的代码应该像你在这里发布一样工作。我假设这不完全是你的代码而append是另一个事件处理程序的动态结果(而不是你在样本中建议的页面加载)。

此外,var eventid = $(this).attr('id');在您的示例中也不起作用,因为id上没有<li>属性...我认为这不是确切代码的另一个原因给你带来麻烦。 :)