2009-04-17 10 views

risposta

10

è possibile toccare nel PageRequestManager endRequestEvent:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){}); 

O se è il controllo eventi che stai tentando di allegare, puoi utilizzare jQuery live events.

Un'altra opzione è eseguire manualmente la delega degli eventi. È ciò che l'evento "live" sta facendo sotto le coperte. Collega il gestore di eventi al documento stesso, quindi esegui il metodo in modo condizionale se il mittente dell'evento era l'elemento che ti aspetti.

$(document).click(function(e){ 
    if($(e.target).is(".collapseButton")){ 
     $(this).find(".collapsePanel").slideToggle(500); 
    } 
}) 
+0

grazie a ciò ha funzionato, suppongo che non sia così efficace ma è solo per questa pagina. – Blankman

+0

In realtà è molto efficiente. Se si dispone di gestori di eventi su ogni riga di una griglia, questo avrà un solo gestore di eventi per l'intera griglia. Diventa ancora meglio se hai diversi gestori di eventi per ogni riga. Puoi farcela con una sola .... e niente da allegare ai nuovi record creati manualmente o tramite postback parziali. – Mark

6

Sto supponendo da "postback parziale della pagina" che stai lavorando in Asp.net land.

Provare a utilizzare

Sys.Application.add_load(function() { }); 

Si dovrebbe comunque essere in grado di utilizzare tutte le cose normali jQuery all'interno che func.

+0

Esattamente. Questo è esattamente il motivo per cui MS ha inventato questo evento di caricamento: sapevano che avrebbero spazzato via elementi DOM dopo postback parziali, e avevano bisogno di fornire agli sviluppatori un modo unico di fare cose quando la pagina è pronta, indipendentemente dal fatto che siano stati usati fantastici AJAX UpdatePanel o non. – JPot

+0

Perfetto. Questo ha fatto il trucco. Ho appena chiamato i miei stessi metodi di impostazione direttamente e tramite questo evento e ora funziona perfettamente. Saluti! –

0

Alcuni elementi DOM vengono sostituiti quando si esegue un postback parziale e, naturalmente, i nuovi elementi perderanno i collegamenti jQuery. È possibile utilizzare la classe ScriptManager per registrare uno script che verrà eseguito dopo la fine di postback parziali (date un'occhiata here)

2

Partenza la funzione "live" di jQuery 1.3 here. È possibile aggiungere eventi agli elementi futuri nonché gli elementi correnti nella pagina. Questo potrebbe semplificare il codice che dovrai scrivere.

+0

non stiamo usando 1.3 così cnt 'uso live. – Blankman

+1

Usiamo molto spesso eventi "live", ma a volte non soddisfano le esigenze. Se stai usando jQuery per manipolare il DOM, dovrai ri-manipolarlo dopo che è stato aggiornato tramite il postback parziale. – Mark

+1

È possibile ottenere lo stesso effetto di live eseguendo manualmente la delega degli eventi. – Mark

0

La soluzione più elegante (utilizzando jQuery 2.x) è questo:

Usa "on" evento. Assicurati di associare l'evento al documento e non all'elemento stesso!

Codice esempio:

$(document).on('click', 'div.messages', function() { 
    console.log('click on div.messages'); 
    return false; 
}); 

inserire questo codice in document.ready per esempio.

Questo funziona anche se div.messages viene modificato o creato all'interno di un UpdatePanel. E non viene mai sparato due o più volte contemporaneamente.