2013-04-20 99 views
0

此处用户正在添加对消息的评论。 ajax调用用于在数据库中添加注释,然后将注释显示给jsp页面。jquery函数不会调用新添加的ajax数据

对于每个评论有一个删除按钮的问题是,新增加的ajax评论不调用删除jquery方法。如果我在刷新页面后调用delete方法。

我想新添加的ajax评论的删除方法应该调用没有页面刷新。

Ajax调用添加评论(正常工作将数据添加到数据库和jsp页面shoing)

$('.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(); 

     }); 

    }); 

回答

1

更换

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

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

..因为第一变种是增加了听者只存在当元素初始DOM被加载。

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

+0

Tr ied正常工作谢谢 – user2302288 2013-04-20 15:35:10

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) { 
+0

'的parentId = $(本).parent();'会给父母的ID – user2302288 2013-04-20 15:19:56

+0

Nopes ...我只是建议你正确使用... :) – 2013-04-20 15:20:31

+1

感谢您的建议 – user2302288 2013-04-20 15:33:24

0

您需要将事件处理已经存在的页面上的东西结合;新增项目不受限制。因此,改变你删除的东西,如:

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

首要选择应该是最接近的元素你肯定不会被阿贾克斯被修改 - 我用'body'纯粹是因为我不知道您的标记。

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更多细节