2013-04-20 93 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更多細節