2013-11-15 11 views
11

Sono bloccato a capire quale di questi dovrei usare: beforeunload o onbeforeunload Entrambi sembrano fare cose molto simili, ma con una diversa compatibilità con i browser.beforeunload O onbeforeunload

Alcuni contesto:

Ho una forma. Durante il caricamento della pagina, serializzo il modulo e lo salvi in ​​una variabile. Se l'utente lascia la pagina, serializzo il modulo e confronta i due, per vedere se ci sono state modifiche. Tuttavia, se il modulo viene inviato, l'evento non dovrebbe essere licenziato.

Esempio 1

ho questo lavoro come previsto. Io proprio non capisco le differenze tra i due:

window.onbeforeunload = function(e) { 
    if(strOnloadForm != strUnloadForm) 
     return "You have unsaved changes."; 
} 

Con questa formazione per fermarlo sparare quando si salva il modulo (legato a .submit())

window.onbeforeunload = null; 

Esempio 2

window.addEventListener("beforeunload", function(event) { 
    if(strOnloadForm != strUnloadForm) 
     event.returnValue = "You have unsaved changes."; 
}); 

Con questa riga per arrestare l'attivazione quando si salva il modulo (associato a .submit())

window.removeEventListener("beforeunload"); 

Cosa dice la documentazione

ho letto la documentazione per onbeforeunload e beforeunload. Sotto la sezione onbeforeunloadNotes si afferma:

È possibile e dovrebbe gestire questo evento attraverso window.addEventListener() e l'evento beforeunload. Più documentazione è disponibile lì. 1

Il che mi fa pensare che dovrebbe utilizzare quest'ultimo. Tuttavia la documentazione per removeEventHandler dice questo:

addEventListener() e removeEventListener() non sono presenti nei browser più vecchi. È possibile aggirare questo problema inserendo il seguente codice all'inizio degli script, consentendo l'uso di addEventListener() e removeEventListener() in implementazioni che non lo supportano in modo nativo. 2

Potrebbe qualcuno si prega di far luce sulle differenze di questi si prega, e il migliore da usare?


https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload#Notes https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener#Polyfill_to_support_older_browsers

+1

E 'esattamente lo stesso evento, ma quando si usa addEventListener si lascia sempre della parte "on". – adeneo

+0

Grazie, ha senso che in realtà è solo un modo diverso di sparare allo stesso evento. –

risposta

20

window.onbeforeunload = function() {/**/} sarà sovrascrivere eventuali gestori esistenti e sostituirlo con il proprio.

window.addEventListener("beforeunload", function() {/**/}); aggiungerà un nuovo gestore.

addEventListener è molto preferito. Nei browser più vecchi (ovvero IE6, forse IE7) è possibile utilizzare attachEvent.

Potrai comunemente vedere il codice come:

function addEvent(object, event_type, event_handler) { 
    if (object.addEventListener) { 
     object.addEventListener(event_type, event_handler, false); 
    } else { 
     object.attachEvent("on" + event_type, handler); 
    } 
} 
+2

Ok grazie. È perfettamente logico che "onbeforeunload" sovrascriva qualsiasi gestore mentre l'uso di "addEventListener" ne aggiunge uno, una volta che lo sai. –