2009-07-30 10 views
5

Ho vincolato gli eventi jquery impostati per mouseenter mouseleave e jquery draggable. I div vengono posizionati in un pannello di aggiornamento e quando si fa clic su un pulsante le informazioni vengono inviate al database e il pannello di aggiornamento viene aggiornato. Tuttavia, quando il pannello viene aggiornato, gli eventi jQuery non funzionano più. Qualche idea sul perché questo sarebbe il caso?Il pannello di aggiornamento di ASP.NET blocca jquery dal funzionamento

risposta

7

Puoi aggiungere un trigger Asincrono alla tua pagina per chiamare un JavaScript/Funzione jQuery dopo ogni chiamata asincrona.

Inserire questo codice nel tuo Page_Load() del codice aspx dietro:

//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); 

Questo frammento di codice in modo specifico chiamare la funzione AsyncDone JavaScript/jQuery();

+0

Ho provato questo, ma la mia funzione "AsyncDone()" non è stata chiamata. – ErnieStings

+0

Hai provato a mettere un avviso per vedere se viene chiamato? Dovrai riagganciare i tuoi eventi jquery dopo ogni caricamento asincrono della pagina all'interno della funzione AsyncDone(). –

1

Utilizzare live.

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

dalla documentazione jQuery per "live": Attualmente non supportato: sfocatura, messa a fuoco, MouseEnter, mouseLeave, il cambiamento , invia –

+0

Per le persone che hanno appena trovato questa domanda, questo non è più il caso, jQuery 1.4 e le versioni più recenti supportano tutti gli eventi che hanno bolle. https://api.jquery.com/live/ – nyuszika7h

3

prova utilizzando

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

anziché

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

Ciò funzionerà quando un pulsante che è all'interno di un pannello di aggiornamento viene cliccato; va al server e riaggiungerà il jquery quando ritorna. Tuttavia, questo non funziona con i postback asincroni causati da un controllo come eo: AJAXUploader ma combinando questo con la versione Bryans puoi gestire anche i postback asincroni

3

Dai uno sguardo a questo blog post di Encosia che ti offre un paio di modi per riavviarti dopo gli aggiornamenti asincroni. Ho trovato questo risolto il mio problema che era simile.

0

Bryan ha la risposta. Io di solito aggiungo che con alcuni gestori di eventi, per la scuoiatura e tale, che il fuoco dopo postback con questo:

/** 
    * .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 
Problemi correlati