2011-09-21 42 views
1

我試圖替換在點擊鏈接時動態添加到對話框元素的div內的文本。在JQuery中獲取動態添加的元素

var feedBackDialog; 
    if(!feedbackDialog){ 
     $(".feedback_link").click(function() { 
      //set contents of the dialog 'feedback-dialog' 
      $.get("https://stackoverflow.com/users/feedback", null, function(result) { 

       feedBackDialog = $("#feedback-dialog").html(result). //set html content during callback 
        attr('title', title). 
        dialog({ autoOpen: true, width: 560, modal: true 
      }); 
     }); 
     } 
    else 
    { 
     feedbackDialog.dialog({ autoOpen: true, width: 560, modal: true }); 
    } 
    //change the text in the newly created element. 
    $('#feedback-label').text($(this).attr('feedback_desc')); 

id爲feedback-label存在於那我取的HTML的元素。但是,最後一行的$('#feedback-label')不起作用,因爲DOM尚未刷新。我試過$("#feedback-dialog").find('#feedback-label'),但似乎並不一致。有誰知道獲得這個新創建的元素的好方法嗎? 我知道我可以簡單地用內容替換html <div id="feedback_label"></div>的字符串,但我正在尋找更好的方法。

回答

2

移動最後一行的$.get回調函數,因爲當Ajax調用完成後的內容將只准備:

$.get("https://stackoverflow.com/users/feedback", null, function(result) { 
     $("#feedback-dialog").html(result). //get HTML 
           attr('title', title). 
           dialog({ autoOpen: true, width: 560, modal: true }); 
     $('#feedback-label').text($(this).attr('feedback_desc')); //change the text in the newly created element. 

}); 
+0

這個想法似乎是正確的,但文字並沒有添加到第一次點擊div。 – arviman

+0

您是否收到任何錯誤訊息? –

+0

沒有錯誤信息。我相信問題在於,jquery的對話框不包含文本,因爲它是在*切換到div之前創建的。 – arviman

3

這不是因爲dom沒有被刷新,這是因爲你正在發出一個尚未完成的AJAX請求。的代碼行添加到成功回調,你應該是金:

$.get("https://stackoverflow.com/users/feedback", null, function(result) { 
    $("#feedback-dialog").html(result).attr('title', title).dialog({ autoOpen: true, width: 560, modal: true }); 
    $('#feedback-label').text($(this).attr('feedback_desc')); 
}); 
+0

+1。但問題在於對話框第一次似乎沒有包含該值。 – arviman