jquery - JavaScript før du forlater siden
Jeg vil lage en bekreftelse før brukeren forlater siden. Hvis han sier ok, vil det omdirigere til en ny side, eller avbryte å forlate. Jeg prøvde å lage det med onunload
<script type="text/javascript">
function con() {
var answer = confirm("do you want to check our other products")
if (answer){
alert("bye");
}
else{
window.location = "http://www.example.com";
}
}
</script>
</head>
<body onunload="con();">
<h1 style="text-align:center">main page</h1>
</body>
</html>
Men bekrefter det etter at siden allerede er lukket? Hvordan gjør man det riktig?
Det hadde vært enda bedre om noen viste hvordan man gjør det med jQuery?
Svar #1
onunload (eller onbeforeunload) kan ikke omdirigere brukeren til en annen side. Dette er av sikkerhetsgrunner.
Hvis du vil vise en ledetekst før brukeren forlater siden, bruk onbeforeunload:
window.onbeforeunload = function(){
return 'Are you sure you want to leave?';
};
Eller med jQuery:
$(window).bind('beforeunload', function(){
return 'Are you sure you want to leave?';
});
Dette vil bare spørre brukeren om de vil forlate siden eller ikke, du kan ikke omdirigere dem hvis de velger å bli på siden. Hvis de velger å forlate, vil nettleseren gå dit de sa den skulle gå.
Du kan bruke onunload for å gjøre ting før siden lastes ut, men du kan ikke omdirigere derfra (Chrome 14+ blokkerer varsler inne i onunload):
window.onunload = function() {
alert('Bye.');
}
Eller med jQuery:
$(window).unload(function(){
alert('Bye.');
});
Svar #2
Denne koden når du også oppdager at skjemaets tilstand endres eller ikke.
$('#form').data('serialize',$('#form').serialize()); // On load save form current state
$(window).bind('beforeunload', function(e){
if($('#form').serialize()!=$('#form').data('serialize'))return true;
else e=null; // i.e; if form state change show warning box, else don't show it.
});
Du kan google JQuery Form Serialize-funksjonen, dette samler alle skjemainndata og lagrer dem i arrayet. Jeg antar denne forklaringen er nok :)
Svar #3
Dette er hva jeg gjorde for å vise bekreftelsesmeldingen bare når jeg har usikrede data
window.onbeforeunload = function() {
if (isDirty) {
return 'There is unsaved data.';
}
return undefined;
}
å returnere undefined vil deaktivere bekreftelsen
Merk: å returnere null vil ikke fungere med IE
Du kan også bruke undefined for å deaktivere bekreftelsen
window.onbeforeunload = undefined;
Svar #4
Dette vil varsle når du forlater nåværende side
<script type='text/javascript'>
function goodbye(e) {
if(!e) e = window.event;
//e.cancelBubble is supported by IE - this will kill the bubbling process.
e.cancelBubble = true;
e.returnValue = 'You sure you want to leave?'; //This is displayed on the dialog
//e.stopPropagation works in Firefox.
if (e.stopPropagation) {
e.stopPropagation();
e.preventDefault();
}
}
window.onbeforeunload=goodbye;
</script>
Svar #5
Du kan bruke følgende én-liner for å alltid spørre brukeren før du forlater siden.
window.onbeforeunload = s => "";
For å spørre brukeren når noe på siden har blitt endret, se dette svaret.
Svar #6
For å ha en popup med Chrome 14+, må du gjøre følgende:
jQuery(window).bind('beforeunload', function() {
return 'my text';
});
Brukeren vil bli spurt om han vil bli eller dra.
