2009-07-30 12 views
5

He enlazado los eventos de jquery configurados para mouseover mouseleave, así como jquery draggable. Los divs se colocan en un panel de actualización y, cuando se hace clic en un botón, se envía información a la base de datos y se actualiza el panel de actualización. Sin embargo, cuando se actualiza el panel, los eventos de jquery ya no funcionan. ¿Alguna idea de por qué este sería el caso?El panel de actualización de ASP.NET detiene la ejecución de jquery en

Respuesta

7

Puede agregar un activador asincrónico a su página para llamar a un JavaScript/Función jQuery después de cualquier llamada asíncrona.

Coloque este código en tu Load() de su código aspx atrás:

//This script handles ajax postbacks, by registering the js to run at the end of *AJAX* requests 
Page.ClientScript.RegisterStartupScript(typeof(Page), "ajaxTrigger", "Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);", true); 
Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "EndRequest", "function EndRequestHandler(sender, args){AsyncDone();}", true); 

Este fragmento de código va a llamar a la función específica AsyncDone JavaScript/jQuery();

+0

Intenté esto, pero mi función "AsyncDone()" no fue llamada. – ErnieStings

+0

¿Intentó poner una alerta para ver si se está llamando? Tendrá que volver a conectar sus eventos jquery después de cargar cada página asíncrona dentro de la función AsyncDone(). –

1

Use live.

$("div").live("mouseenter", function(){ 
     // do something 
    }); 
+0

de la documentación de jQuery para "vivo": Actualmente no soportado: mancha, foco, MouseEnter, mouseleave, el cambio , envíe –

+0

. Para las personas que recientemente han encontrado esta pregunta, este ya no es el caso, jQuery 1.4 y las versiones más nuevas admiten todos los eventos que burbujean. https://api.jquery.com/live/ – nyuszika7h

3

tratar de usar

function pageLoad(sender, args) 
{ 
    // JQuery code goes here 
} 

en lugar de

$(document).ready(function() { 
     // JQuery code goes here 
    }); 

Esto funciona cuando se hace clic en un botón que se encuentra dentro de un panel de actualización; va al servidor y volverá a agregar el jquery cuando regrese. Sin embargo, esto no funciona con las devoluciones de datos asincrónicas causadas por un control como el eo: AJAXUploader pero al combinar esto con la versión de Bryans también puede gestionar las devoluciones asincrónicas

3

Echa un vistazo a este blog post de Encosia, que te da un par de formas de volver a vincular después de las actualizaciones asíncronas. Encontré que esto resolvió mi problema, que era similar.

0

Bryan tiene la respuesta. Me suelen añado que con algunos controladores de eventos, para despellejar y tal, que el fuego después de las devoluciones de datos con este:

/** 
    * .NET Event Handlers 
    * When new code is added on to the client by way of 
    * .NET PostBacks, CSS is typically ignored. This method 
    * can be used to add CSS to new elements as they are added 
    * asynchronously. It calls a script at the end of every 
    * partial post back request. 
    * 
    * @example - Core.NETEventHandlers.AsyncPostBack.Init(); 
    */  
    var NETEventHandlers: { 
     /** 
     * Async Post Back Handler 
     * calls a script at the end of every partial post back request 
     */   
     AsyncPostBack: { 
      EndRequest: { 
       Add: function() { 
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(NETEventHandlers.AsyncPostBack.EndRequest.Handler); 
       } // EO Add 
       , Handler: function(sender, args) { 
        // Handlers here. 
        alert('Hello World'); 
       } // EO Handler 
      } // EO endRequest 
      , Init: function() { 
       Sys.Application.add_init(NETEventHandlers.AsyncPostBack.EndRequest.Add); 
      } 
     } // EO AsyncPostBack 
    } // EO dotNETEventHandlers 
Cuestiones relacionadas