Jquery append()是否异步运行?

时间:2011-02-22 23:18:58

标签: jquery asynchronous append

我已经看过很多帖子(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中的预期行为,那么等待追加完成的正确方法是什么?

2 个答案:

答案 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是同步的
  • 显然DOM不会同步更新,尤其是在谷歌浏览器中,我在div
  • 之后尝试检索append的高度时遇到了这个问题
  • 我的假设是有异步更新的浏览器更新线程,下面有更多评论,但仍然不清楚如何工作,但解决方案适用于所有情况。