He visto varias publicaciones ( añadir supuestamente inmediatas ) con respuestas aceptadas contradictorias sobre esto. Estamos usando JQuery 1.4 ( http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js ) y append() parece ser asíncrono, de modo que:
Editado para mostrar el código en el contexto de la devolución de llamada de 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"); }Ejecuta y crea la página como se esperaba, pero la consulta de destino no arroja nada en tiempo de ejecución. Ejecutar el mismo código en la consola JS recupera los elementos como se esperaba.
Si este es el comportamiento esperado en JQuery, ¿cuál es la forma correcta de esperar hasta que finalice la adición?
Todos los comentarios ayudaron a rastrear esto. Estaba siguiendo una pista falsa en la consola. El problema no estaba en la sincronicidad, estaba en las siguientes líneas:
$targets.each( function(){ ... this.html(); ...necesitaba ser
$(this).html();En resumen, todos tenían razón. Jquery append() se comporta sincrónicamente.
Prueba esto, si las cosas no funcionan después de un append .
$('#dynamic-container').append(<your-content>) ; setTimeout(function() { ...code which addresses elements inside #dynamic-container... },0) ;Más detalles:
append es sincrónicodiv después de append