jQuery .on(“click”...),动态创建的元素不起作用

时间:2013-07-26 04:14:41

标签: javascript jquery

所以我使用jQuery“.on”函数和动态创建的元素有一些令人不安的结果,我使用的代码就是这样:

在运行期间随机调用某个函数:

$(".activity-feed").append('<div class="feed-story big-feed-story feed-story-comment multiline-feed-story">\
        <div class="photo-view inbox-size photo-view-rounded-corners">\
            <div class="comment-icon">\
            </div>\
        </div>\
        <div class="comment-content">\
            <div class="delete ucomment-delete click-target" id="ucomment-'+uqid+'" tabindex="-1" style="outline:none;"></div>\
            <span class="feed-story-creator"><a href="/user/'+uid+'/'+username+'">'+username+'</a>&nbsp;</span>\
                <span class="comment-text">\
                    <span>\
                        <span style="white-space: pre-wrap;">'+$(".comment-box").html()+'</span>\
                    </span>\
                </span>\
            <div>\
                <span class="feed-story-footer"><span class="story-timestamp-view">'+time+'</span></span>\
            </div>\
        </div>\
    </div>');

然后这个函数应该允许删除注释(它在页面底部定义,而不是在文档准备好之后)

$(".delete").on("click", function() {
    alert('test....');
});

然而,我点击“ucomment-delete”按钮,没有任何反应:(但是,如果我点击加载时出现的评论,它会起作用 为什么是这样?我做错了什么?

4 个答案:

答案 0 :(得分:10)

尝试事件委托

$(document).on("click", ".delete", function() {
 alert();
});

答案 1 :(得分:1)

您需要将其绑定到页面上已存在的元素,然后才能为页面上可能尚不存在的元素指定选择器:

$(".activity-feed").on("click",".delete", function() {
    alert('test....');
});

看一下这个小提琴的例子:

http://jsfiddle.net/G4MGZ/

答案 2 :(得分:0)

如果on无效,则jquery版本较旧,请尝试delegate

$('body').delegate('.delete','click',function(){
 //stuff  
});

答案 3 :(得分:0)

.on()包含在document.ready()中,即使它位于文件的末尾。我认为@John Koemer所说的也是正确的。