Javascript 由.append()添加的元素在追加后是否已准备就绪?
我正在用jquery构建一种无限卷轴,但我面临一个DOM就绪的问题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+'" >'+
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实际提供答案,而不仅仅是描述问题这个问题。