Boîte de dialogue s'exécute pendant 1 sec et disparaît?
Je suis en cours d'exécution, une boîte de dialogue à l'utilisateur de quitter la page. La seule chose est qu'il tourne pendant 1 sec et disparaît? Je sais que cela a à voir avec bind('beforeunload')
, mais le dialogue meurt plus tôt que vous pouvez lire.
Comment faire pour arrêter cela?
$(document).ready(function() {
//Append dialog pop-up modem to body of page
$('body').append("<div id='confirmDialog' title='Confirm'><p><span class='ui-icon ui-icon-alert' style='float:left; margin:0 7px 20px 0;'></span>Are you sure you want to leave " + brandName + "? <br /> Your order will not be saved.</p></div>");
//Create Dialog box
$('#confirmDialog').dialog({
autoOpen: false,
modal: true,
overlay: {
backgroundColor: '#000',
opacity: 0.5
},
buttons: {
'I am sure': function() {
var href = $(this).dialog('option', 'href', this.href);
window.location.href = href;
},
'Complete my order': function() {
$(this).dialog('close');
}
}
});
//Bind event to Before user leaves page with function parameter e
$(window).bind('beforeunload', function(e) {
//Mozilla takes the
var e = $('#confirmDialog').dialog('open').dialog('option', 'href', this.href);
//For IE and Firefox prior to version 4
if (e){
$('#confirmDialog').dialog('open').dialog('option', 'href', this.href);
}
//For Safari
e.$('#confirmDialog').dialog('open').dialog('option', 'href', this.href);
});
//unbind function if user clicks a link
$('a').click(function(event) {
$(window).unbind();
//event.preventDefault();
//$('#confirmDialog').dialog('option', 'href', this.href).dialog('open');
});
//unbind function if user submits a form
$('form').submit(function() {
$(window).unbind();
});
});
- vous avez besoin de retourner
false
sinon, l'événement continue à leunload
et, par conséquent, va fermer la fenêtre... - avec le retour de faux, la plupart des navigateurs ouvrez une boîte de Dialogue par Défaut: "rester" ou "quitter"
- de retour
false
debeforeunload
va juste faire une boîte d'alerte avec les "fausses" sur elle. - Lors de la copie de un exemple, essayer de le comprendre avant de le modifier.
e.$('#confirmDialog')
n'a pas de sens.
Vous devez vous connecter pour publier un commentaire.
beforeunload
utilise une méthode intégrée dans le navigateur, vous avez besoin de retourner une chaîne de caractères, et le navigateur affiche la chaîne et de demander à l'utilisateur s'il souhaite quitter la page.Vous ne pouvez pas utiliser vos propres boîtes de dialogue (ou jQueryUI des boîtes de dialogue modales) pour remplacer
beforeunload
.beforeunload
ne peut pas rediriger l'utilisateur vers une autre page.Cela fera une boîte d'alerte pop-up qui dit
'Are you sure you want to leave?'
et demande à l'utilisateur s'ils veulent quitter la page.(Mise à JOUR: Firefox n'affiche pas votre message personnalisé, il n'affiche que ses propres.)
Si vous souhaitez exécuter une fonction que la page est en cours de déchargement, vous pouvez utiliser
$(window).unload()
, il suffit de noter qu'il ne peut pas arrêter la page de déchargement ou de rediriger l'utilisateur. (Mise à JOUR: Chrome et Firefox de bloquer les alertes dansunload
.)Démo: http://jsfiddle.net/3kvAC/241/
Mise à JOUR:
$(...).unload(...)
est obsolète depuis jQuery v1.8, au lieu d'utilisation:unload
de l'ignorer.Vous pouvez également utiliser la suite de décharger la méthode introduite par Microsoft pour atteindre cet objectif.
Cliquez sur ici pour voir la démo en direct.
Cliquez sur de lire la documentation de Microsoft.
Dans mon cas je l'utilise pour montrer un "preloader" avant d'aller à l'autre partie de ma webapp, donc cela correspond à la "preloader" qui apparaît dans la nouvelle page qui s'ouvre, pour un changement esthétique entre les pages.
Ce que cela a fonctionné pour moi (et j'ai tout essayé), était-ce: