在JQuery中获取动态添加的元素

在JQuery中获取动态添加的元素,jquery,Jquery,我试图替换一个div中的文本,该div在单击链接时被动态添加到对话框元素中 var feedBackDialog; if(!feedbackDialog){ $(".feedback_link").click(function() { //set contents of the dialog 'feedback-dialog' $.get("/users/feedback", null, function(resu

我试图替换一个div中的文本,该div在单击链接时被动态添加到对话框元素中

    var feedBackDialog;
    if(!feedbackDialog){
        $(".feedback_link").click(function() {
            //set contents of the dialog 'feedback-dialog' 
            $.get("/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'));
我正在获取的html中存在一个id为
反馈标签
的元素。但是,最后一行的
$(“#反馈标签”)
不起作用,因为DOM尚未刷新

我试过做
$(“#反馈对话框”)。查找(“#反馈标签”)
,但似乎效果并不一致。有人知道获得这个新创建元素的好方法吗?
我知道我可以简单地用内容替换html的字符串,但我正在寻找一种更好的方法。

这不是因为dom没有被刷新,而是因为您正在发出一个尚未完成的AJAX请求。将代码行添加到成功回调中,您应该是金色的:

$.get("/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'));
});

这不是因为dom没有被刷新,而是因为您正在发出一个尚未完成的AJAX请求。将代码行添加到成功回调中,您应该是金色的:

$.get("/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'));
});

将最后一行移到回调函数
$.get
,因为内容只有在Ajax调用完成后才能准备好:

$.get("/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.

});

将最后一行移到回调函数
$.get
,因为内容只有在Ajax调用完成后才能准备好:

$.get("/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.

});

这个想法似乎是正确的,但文本不会在第一次单击时添加到div。没有错误消息。我认为问题在于jquery的对话框不包含文本,因为它是在对div进行更改之前创建的。我做了以下更改并使其正常工作(在更改标签后,我关闭了自动打开并重新打开对话框):
feedbackDialog=feedbackDialog.dialog({autoOpen:false,width:560,modal:true});$('#反馈标签').text($(this.attr('feedback_desc'));feedbackDialog.dialog('open'))
这个想法似乎是正确的,但文本并没有在第一次单击时添加到div中。没有错误消息。我相信问题在于jquery的对话框不包含文本,因为它是在对div进行更改之前创建的。我做了以下更改,并使其正常工作(我关闭了自动打开并在更改标签后重新打开对话框):
feedbackDialog=feedbackDialog.dialog({autoOpen:false,width:560,modal:true});$('#反馈标签').text($(this.attr('feedback_desc'));feedbackDialog.dialog('open'));
+1。但问题是对话框第一次似乎不包含该值。+1。但问题是对话框第一次似乎不包含该值。