Domanda

Esiste un modo per evitare che onbeforeunload da essere chiamato quando si fa clic sul link mailto in cromo. In FF, Safari, IE sta lavorando bene.

<html>
<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">
        google.load("jquery", "1.3.2");
    </script>

    <script type="text/javascript">
        $(document).ready(function(){
            window.onbeforeunload = confirmExit;
        });

        function confirmExit() {
            return "Are you sure?";
        }
    </script>
</head>
<body>
    <a href="mailto:someone@somewhere.com?subject=test mail&body=Hello%20World">Mail Link</a>
</body>
</html>
È stato utile?

Soluzione

Che dire di una soluzione alternativa?

$(document).ready(function(){
    mailtoClicked = false;
    window.onbeforeunload = confirmExit;
    //Test if browser is Chrome
    if (/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())) {
        $('a[href^=mailto]').click(function() {mailtoClicked = true;});
    }
});

function confirmExit() {
    if (!mailtoClicked) {
        return "Are you sure?";
    } else {
        mailtoClicked = false;
    }
}

Demo .

Altri suggerimenti

Ecco una proposta di soluzioni che sembra ragionevole

http: //www.ilovebonnie.net/2009/09/23/how-to-use-onbeforeunload-with-form-submit-buttons/


UPDATE (link è morto) - il contenuto copiato da Google cache

Come utilizzare onbeforeunload con Forma Invia pulsanti

23 Settembre 2009 - geekery

Mentre si fa un po 'di programmazione mi sono imbattuto in una situazione interessante. Pur comprendendo che è male per rendere difficile per un utente di lasciare una pagina, io non sono qui per discutere i meriti (o mancanza) di onbeforeunload.

In una forma particolare, stiamo costringendo il browser a non memorizzare nella cache le informazioni al fine di evitare potenziali problemi di AJAX / JavaScript se devono lasciare la forma e tornare come browser non tutti agiscono allo stesso (ad esempio IE lascia caselle controllato ma non ricorda i cambiamenti che si sono verificati alla pagina perché JavaScript). Come tale, avvertiamo i nostri utenti quando sono in procinto di lasciare il modulo d'ordine per far loro sapere che sarà necessario per riempirlo di nuovo.

La funzione era abbastanza semplice:

window.onbeforeunload = function () {
    return "You are about to leave this order form. You will lose any information...";
}

Purtroppo, questo sarebbe anche essere attivato se l'utente ha presentato la forma che, ovviamente non è quello che vogliamo. Dopo la ricerca in giro su Internet mi sono imbattuto in una semplice soluzione che ho pensato di condividere:

// Create a variable that can be set upon form submission
var submitFormOkay = false;
window.onbeforeunload = function () {
    if (!submitFormOkay) {
        return "You are about to leave this order form. You will lose any information...";
    }
}

Dal onclick sembra registrarsi prima onsubmit facendo clic su un pulsante di invio, si può aggiungere un po 'di dichiarazione di variabile al nostro pulsante per inviare la submitFormOkay sarà impostata su true prima che il modulo di presentazione avviene:

<input type="submit" id="submit_button" onclick="submitFormOkay = true;">
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top