2011-09-20 8 views
7

Sto riscontrando strani problemi con jQuery (1.6.x). Ho questo semplice chiamata sulla mia pagina:Perché jQuery a volte sovrascrive window.onbeforeunload?

window.onbeforeunload = function() { return 'Are you sure ?'; }; 

Ma non funziona, perché, come ho scoperto, jQuery sovrascrive il contenuto del window.onbeforeunload. In console JS, posso vedere che window.onbeforeunload contiene pezzo di codice jQuery:

function(e) { 
// Discard the second event of a jQuery.event.trigger() and 
// when an event is called after a page has unloaded 
return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? 
    jQuery.event.handle.apply(eventHandle.elem, arguments) : undefined; 
}; 

C'è un modo posso trovare perché e dove jQuery sovrascrive la mia funzione onbeforeunload? Quando provo a eseguire jsfiddle vuoto con solo jQuery caricato e con la mia funzione onbeforeunload, funziona come previsto.

Eventuali suggerimenti saranno apprezzati. Grazie in anticipo.

EDIT:

Solo nel caso, qualcuno suggerisce di utilizzare:

$(window).bind('beforeunload', function() { return 'Are you sure';}); 

ho già provato e si comporta allo stesso modo utilizzando JavaScript puro.

+0

È possibile utilizzare il metodo 'unload' di jQuery? http://api.jquery.com/unload/ –

+0

Sono in grado di applicare correttamente la mia funzione a 'onbeforeunload' e io uso jQuery 1.6. C'è qualche altra informazione o codice che puoi fornire? Non funziona in tutti i browser? http://jsfiddle.net/Kai/QgVE8/ – Kai

+0

Stai urlando nello spazio. Fornisci un caso di test che riproduca questo problema e possiamo aiutarti. – mekwall

risposta

4

Ok, ho finalmente trovato una soluzione, che probabilmente non è la più pulita, perché non conosco la causa esatta del problema, ma funziona. Ho messo la mia funzione beforeunload nella funzione di caricamento di jQuery in modo che venga eseguita dopo che il DOM e gli altri elementi sono stati caricati.

$(window).load(function() { 
    $(window).bind('beforeunload', function() { return 'Are you sure ?';}); 
}); 
+0

this $ (window) .bind ('beforeunload', function() {return 'Sei sicuro?';}); ha funzionato bene per me grazie –

0

Si potrebbe avere una certa fortuna di provare un setTimeout(function(){ ... },0), ho incontrato lo stesso problema e questo ha funzionato come una soluzione praticabile.