2010-07-27 22 views
7

Miré bastantes de las preguntas relacionadas y debo estar preguntándome esto completamente diferente ya que solo vi unas pocas que parecían relacionarse. Estoy cargando un div entero medio a través de JQuery Ajax call y simplemente quiero poder hacer algo de JQuery automático en esa nueva área como $ (document) .ready permite cuando se carga un DOM. Leí que livequery haría esto, pero pensé que habría una forma integrada en él. Estoy tratando de agregar un selector de fecha a un campo de entrada justo al comienzo.

Este es el contenido que llamará para el contenido en el backend que luego extraerá una sección específica.

$.post("ReportingWizard",$("#wizard_form").serialize(), function (data) { setData(data); }); 

function setData(data) { 
divElement.innerHTML = data; 
$(activeTab).fadeIn(); //Fade in the active content 
$(".wizardBody").fadeIn(); 
} 

Dentro del archivo que se está poniendo en ese DivElement tendrá un método de jQuery que necesita ser ejecutado para cambiar el html en su interior.

+0

¿Qué desea hacer y cuándo? ¿Después de que se carga el "div medio"? –

+0

Quiero que se agregue antes de que se cargue el div central, pero según el contenido que se va a buscar. JQuery está realmente en el contenido que se está cargando y básicamente proporciona identificadores a los divs y agrega imágenes y capacidades de selección de fechas a áreas específicas también. – Craig

Respuesta

8

Registre los eventos en la devolución de llamada de la función AJAX.

Si está utilizando .load() hacer cargar el div media, colocar el código jQuery directamente en la devolución de llamada:

$('#middleDiv').load('/fish.php', function() { 
    $('#someDiv').fadeIn(300); // ? whatever 
}); 

Si está utilizando algunas de las otras funciones AJAX, coloque su jQuery código después de la línea en la que se agrega a los elementos del DOM en la devolución de llamada:

jQuery.get('/fish.php', function (response) { 
    $('#middleDiv').html(response); 

    $('#someDiv').fadeIn(300); // ? whatever 
}); 

Si se trata de eventos que desea unirse, es posible buscar en el uso. on() (o. delegate() o .live() si está utilizando las versiones anteriores de jQuery, que existían cuando esta pregunta se escribió originalmente). Puede ver una comparación de estos diversos métodos here.

Estos métodos permiten el enlace de eventos a elementos incluso cuando aún no están presentes en el DOM; lo que significa que puede vincular los eventos en su bloque $(document).ready(), aunque los elementos aún no estén registrados en DOM.

+0

Estoy usando el mismo método de publicación para 3 o 4 selecciones de datos diferentes, por lo que la segunda línea es lo que realmente está dentro del contenido que se está cargando. Agregué el código que estoy usando actualmente dentro del área general. – Craig

+0

Esta iba a ser mi solución final, gracias. Al final, sin embargo, me dijeron que realmente no necesitábamos Ajax porque las funciones eran cortadas que realmente lo usaban. – Craig

+0

Necesito una función para ejecutar en un elemento clasificado cuando es 1) está cargado o 2) está introducido en la página a través de ajax, probé 'on ('ready', '.my-class', handler)', pero no funcionó. – Shimmy

4

Craig,

creo que está tratando de hacer esto de la manera difícil.

En primer lugar: aunque técnicamente podría manipular la respuesta con javascript/jquery antes de inyectarlos en la página, será mucho más fácil hacerlo inmediatamente después de que se hayan agregado (según un documento preparado)

En segundo lugar: no estoy seguro de cuán efectivo sería ese método si estuviera agregando algo así como un marcador de fecha. Supongo que no puedes agregar un marcador de fecha a un elemento antes de que todo esté en la página (solo una suposición). Esos widgets jQuery UI tienen mucho que ver en segundo plano.

Le sugiero que siga los consejos del Matt.

Si llama $ .post, la función de devolución de llamada es el mismo que sus $ (document) de función ready, que será llamado tan pronto como la respuesta está disponible por lo que podría hacer algo como esto:

$.post(url, data, function(response) { 
    $("#some_element").append(response); 
    // Now your element has been injected you can do whatever u like here 
    // call some function etc. 
}); 

Esta es la mejor manera de hacerlo. La manipulación se realizará tan pronto como los datos se hayan inyectado en su página del mismo modo que $ (documento). Listo.

Si cree que hay algo de retraso con lo que está haciendo y no desea que sus usuarios lo vean, configure la pantalla para ocultarla y, luego, difumine o muestre una vez que se haya realizado la manipulación.

Cuestiones relacionadas