mi sono imbattuto in questa domanda durante la ricerca di risposte alla mia domanda che era simile in natura. Quindi, ho trovato una soluzione qui. Avevo bisogno di chiamare "onbeforeunload" solo quando un utente fa clic su un pulsante specifico e nessuno degli altri. Spero che questo chiarisca la tua domanda.
Ho ottenuto il lavoro in jsfiddle. Puoi testarlo nella demo che ho impostato e puoi vedere chiaramente che funziona solo con uno dei pulsanti. Tuttavia, c'è un avvertimento, per il quale non mi sono preso la briga di cercare una soluzione. Se fai clic sul pulsante e scegli di rimanere sulla pagina, tutti i pulsanti/link/reindirizzamenti/ricaricamenti successivi attivano "onbeforeunload". Sei libero di inventare il tuo lavoro in giro per il "bug" (per mancanza di migliori termini) per fare in modo che non causi quella reazione se l'utente decide di rimanere sulla pagina. Tuttavia, sta funzionando e esegue ciò che hai chiesto di fare nell'ambiente di test.
Ecco il codice:
$(document).ready(function() {
$('.testButton').click(function() {
window.onbeforeunload = function() {
return "Enter your message here...";
}
});
});
EDIT:
Così, dopo la ricerca di altri modi per fare la stessa cosa, mi sono imbattuto in un altro modo per legare un evento al pulsante utilizzando .on di jQuery() metodo. Il codice può essere visto here, verificare che il vecchio codice sia commentato. Di nuovo, lo stesso "bug" di prima, ma fornisce ancora le funzionalità richieste.
Ecco l'alternativa:
$(document).ready(function() {
$('.testButton').on("click", function (event) {
window.onbeforeunload = function() {
return "Enter your message here...";
}
});
});
fonte
2013-01-29 21:44:57
On sia Firefox e IE8 ottengo un errore sulla chiamata a window.onbeforeunload. L'errore di Firefox è "window.onbeforeunload is not a function" e IE ritorna con "Object non supporta questa proprietà o metodo" – mutex
Ok, quindi il problema è che il plugin allega un gestore di eventi tramite 'addEventListener' /' attachEvent' e non direttamente tramite 'window.onbeforeunload'. Immagino che dovrai modificare il codice del plugin per ottenere un riferimento alla funzione 'beforeunload'. – casablanca
Grazie!Funziona ora. Qualche suggerimento su come evitare di usare un gestore globale per il gestore? – mutex