0

在这里,用户正在对消息添加评论。ajax调用用于在数据库中添加评论,然后评论显示到jsp页面。

对于每个评论都有一个删除按钮的问题是新添加的 ajax 评论没有调用 delete jquery 方法。如果我刷新页面,那么在它调用删除方法之后。

我希望新添加的 ajax 注释的删除方法应该在不刷新页面的情况下调用。

ajax 调用以添加评论(正常工作将数据添加到 DB 并在 jsp 页面中显示)

$('.commentbox').on('keydown', function(event) {
        parentId=$(this).parent().attr("id");

        var idis='#'+parentId;
        var commentOn = $(idis).find('input[name="commentOn"]').val();
        var commentIs = $(idis).find('textarea[name="commentbox"]').val();
        var dataString1 = 'commentOn='+ commentOn
            +'&comment='+commentIs;
        $("#comment").val('');
        event.preventDefault();
        $.ajax({   
            type: "POST",   
            url: "addmessagecomment", 
            dataType: "text html",
            data: dataString1,   
            success: function(data) { 
                var divtoadd="#comments_"+commentOn;
                $(divtoadd).append(data); 
                $(idis).find('textarea[name="commentbox"]').val("");
            }     
        }); 
    }); 

用于删除评论(页面刷新后不调用新添加的 ajax 评论工作)

$('.deletecomment').click(function (f){

        var parentId=$(this).parents('.single_comment').attr('id');
        var todel=parentId.replace("comment_","");
        $.post('deletecomment?commentId='+todel, function(data) {
            $('#'+parentId).remove();

        });

    });
4

4 回答 4

1

代替

$('.deletecomment').click(function (f){

$(document).on('click','.deletecomment', function (f) {

.. 因为第一个变体仅将侦听器添加到加载初始 DOM 时存在的元素。

http://api.jquery.com/on/

于 2013-04-20T15:19:30.833 回答
0

你可以做这样的事情。代替:

parentId=$(this).parent().attr("id");
var idis='#'+parentId;

和:

parentId=$(this).parent();
var idis=$(parentId);

而对于AJAX后加东西的问题,需要委托功能。代替:

$('.deletecomment').click(function (f){

和:

$('body').on('click', '.deletecomment', function (f) {
于 2013-04-20T15:18:02.623 回答
0

您需要将事件处理程序绑定到页面上已经存在的东西;新增项目不绑定。因此,将您的删除更改为:

$('body').on('click', '.deletecomment', function (f){
    // stuff...
});

主选择器应该是您确定不会被 Ajax 修改的最接近的元素 - 我使用'body'纯粹是因为我不知道您的标记。

于 2013-04-20T15:21:20.397 回答
0

您的意思是只有新添加的评论 div 的删除按钮不起作用?

为此,您将不得不使用liveon运行

$('.deletecomment').on('click', function (f){

        var parentId=$(this).parents('.single_comment').attr('id');
        var todel=parentId.replace("comment_","");
        $.post('deletecomment?commentId='+todel, function(data) {
            $('#'+parentId).remove();

        });

});

只是click不适用于动态添加的元素,

有关更多详细信息,请参见jquery on function

于 2013-04-20T15:22:30.753 回答