Javascript 由.append()添加的元素在追加后是否已准备就绪?

Javascript 由.append()添加的元素在追加后是否已准备就绪?,javascript,jquery,Javascript,Jquery,我正在用jquery构建一种无限卷轴,但我面临一个DOM就绪的问题 var n = 0; // When user wants to load more, call this function load_10_images(){ var g; var images = ''; for(g=1; g<=10; g++){ // Create images images = '<div id="'+n+'" >'+

我正在用jquery构建一种无限卷轴,但我面临一个DOM就绪的问题

var n = 0;

// When user wants to load more, call this 
function load_10_images(){

    var g; var images = '';

    for(g=1; g<=10; g++){

        // Create images
        images = '<div id="'+n+'" >'+
                    '<li id="li'+n+'">'+
                        '<img id="img'+n+'" src="images/loading.gif" />'+
                    '</li>'+
                 '</div>';

        // add to html
        $("#list").append(images);

        // change source
        $.ajax({
            type: "POST",
            url: "data.php",
            data: {link_n: n},
            success: function(resp) {
                $("#img"+n).attr("src", resp);
            },
        });

        // ...
        n++;
    }

}
var n=0;
//当用户想要加载更多时,调用此
函数加载_10_图像(){
var g;var图像=“”;

对于(g=1;g您的问题是作用域。您在循环过程中使用n创建div和IMG id。但是您可以在ajax回调中访问n的值。因此它将尝试查找$(“#IMG”+n).attr(“src”,resp);无论n的当前值是什么(很可能是最终值,因为它将比post返回的速度更快)

您的问题是作用域。您在循环过程中使用n创建div和IMG id。但是您在ajax回调中访问n的值。因此它将尝试查找$(“#IMG”+n).attr(“src”,resp);无论n的当前值是什么(很可能是最终值,因为它将比post返回的速度更快)问题是,由于AJAX是异步的,所以成功调用中的变量
n
等于最后一个循环中的变量
n
。添加如下闭包:

(function(int){
    $.ajax({
        type: "POST",
        url: "data.php",
        data: {link_n: int},
        success: function(resp) {
            $("#img"+int).attr("src", resp);
        },
    });
})(n);

问题是,由于AJAX是异步的,因此成功调用中的变量
n
等于最后一个循环中的变量
n
。添加如下闭包:

(function(int){
    $.ajax({
        type: "POST",
        url: "data.php",
        data: {link_n: int},
        success: function(resp) {
            $("#img"+int).attr("src", resp);
        },
    });
})(n);

正如许多人所指出的,您还有其他问题导致了您所看到的问题,但要回答您的实际问题,是的,它们在
.append()
之后可用。实际上,您发现人们经常做的事情实际上是在追加元素之前使其可用。在您的代码中(因为您使用的是jQuery),您可以这样做:

images = $('<div id="'+n+'" >'+
    '<li id="li'+n+'">'+
        '<img id="img'+n+'" src="images/loading.gif" />'+
    '</li>'+
'</div>');
images=$(“”+
“
  • ”+ ''+ “
  • ”+ '');

    此时,元素已经存在,可以读取、修改等,但还没有添加到DOM中。

    正如许多人所指出的,您还有其他问题导致您看到的问题,但要回答您的实际问题,是的,它们在
    .append()之后可用
    。实际上,您发现人们经常做的事情实际上是在添加元素之前使其可用。在您的代码中(因为您使用的是jQuery),您可以这样做:

    images = $('<div id="'+n+'" >'+
        '<li id="li'+n+'">'+
            '<img id="img'+n+'" src="images/loading.gif" />'+
        '</li>'+
    '</div>');
    
    images=$(“”+
    “
  • ”+ ''+ “
  • ”+ '');

    此时,元素已经存在,可以读取、修改等,但还没有添加到DOM中。

    var n=g;
    在循环中?我用alert()检查了响应,它给了我想要的链接('),因此问题不是来自我的php文件。循环中可能存在重复的
    var n=g;
    ?我用alert()检查了响应,它给了我想要的链接('),所以问题不是来自我的php文件。可能是ok的副本,问题解决了。我没有注意到。我使用@Karl AndréGagnon的脚本ok,问题解决了。我没有注意到。我使用@Karl AndréGagnon的脚本+1实际提供答案,而不仅仅是描述问题。+1实际提供答案,而不仅仅是描述问题这个问题。