Подтвердить что ты не робот

Jquery append() ведет себя асинхронно?

Я видел несколько сообщений (append предположительно сразу) с противоречивыми принятыми ответами на это. Мы используем 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, то какой правильный способ дождаться добавления завершен?

4b9b3361

Ответ 1

Все комментарии помогли проследить это. Я следил за красной селедкой в ​​консоли. Проблема была не в синхронности, а в следующих строках:

$targets.each( function(){
  ...
  this.html();
  ...

Нужно быть

$(this).html();

Короче говоря, все были верны. Jquery append() ведет себя синхронно.

Ответ 2

Попробуйте, если что-то не работает после append.

$('#dynamic-container').append(<your-content>) ;
setTimeout(function() {
    ...code which addresses elements inside #dynamic-container...
},0) ;

Подробнее:

  • По-видимому append является синхронным
  • По-видимому, DOM не обновляется синхронно, особенно в Google Chrome, я столкнулся с этой проблемой при попытке получить высоту div после append
  • Мое предположение заключалось в том, что были потоки обновлений для браузера, которые обновлялись асинхронно, больше комментариев к этому ниже, до сих пор неясно, как все работает, но решение работает во всех случаях для меня.