我已经看过很多帖子(append supposedly immediate),这些帖子的答案相互矛盾。我们使用的是JQuery 1.4 (http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js),而append()似乎是异步的,这样:
已编辑以在AJAX回调的上下文中显示代码
...
var message = $.ajax({
type: "GET",
url: "/getVolumes/" + _Id,
async: false
}).responseText;
if (parseInt(message) != 0){
var $results = $(message);
$MAIN_DIV.append($results);
retrieveTargets();
}
...
function retrieveTargets(){
var $targets = $(".resultTargets");
}
按预期执行并创建页面,但目标查询在运行时不产生任何内容。在JS控制台中运行相同的代码会按预期检索元素。
如果这是JQuery中的预期行为,那么等待追加完成的正确方法是什么?
答案 0 :(得分:25)
所有评论都有助于追踪这一点。我在控制台里跟着一只红鲱鱼。 问题不在于同步性,而在于下一行:
$targets.each( function(){
...
this.html();
...
需要
$(this).html();
简而言之,每个人都是正确的。 Jquery append()同步运行。
答案 1 :(得分:10)
如果在append
之后无法正常工作,请尝试此操作。
$('#dynamic-container').append(<your-content>) ;
setTimeout(function() {
...code which addresses elements inside #dynamic-container...
},0) ;
更多详情:
append
是同步的div
append
的高度时遇到了这个问题