Диалоговое окно работает в течение 1 секунды и исчезает?
Я запускаю диалоговое окно при выходе пользователя из страницы. Единственное, что он работает в течение 1 секунды и исчезает? Я знаю, что это связано с bind('beforeunload')
, но диалог умирает раньше, чем вы можете прочитать его.
Как мне остановить это происходит?
$(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();
});
});
3 ответа:
beforeunload
использует метод, встроенный в браузер, вам нужно вернуть ему строку, и браузер отобразит строку и спросит пользователя, хотят ли они покинуть страницу.вы не можете использовать свои собственные диалоговые окна (или модальные диалоговые окна jQueryUI) для переопределения
beforeunload
.
beforeunload
не удается перенаправить пользователя на другую страницу.$(window).on('beforeunload', function(){ return 'Are you sure you want to leave?'; });
это сделает окно предупреждения всплывает, что говорит
'Are you sure you want to leave?'
и спрашивает пользователя, если они хотят оставить страница.(обновление: Firefox не отображает ваше пользовательское сообщение, он отображает только свое собственное.)
если вы хотите запустить функцию при выгрузке страницы, вы можете использовать
$(window).unload()
, просто обратите внимание, что он не может остановить страницу от разгрузки или перенаправления пользователя. (Обновление: предупреждения о блокировке Chrome и Firefox вunload
.)$(window).unload(function(){ alert('Bye.'); });
демо: http://jsfiddle.net/3kvAC/241/
обновление:
$(...).unload(...)
is устаревший начиная с jQuery v1. 8, вместо этого используйте:$(window).on('unload', function(){ });
для этого можно также использовать следующий метод выгрузки, представленный корпорацией Майкрософт. Нажмите здесь посмотреть демо.
function closeIt() { return "Any string value here forces a dialog box to \n" + "appear before closing the window."; } window.onbeforeunload = closeIt;
клик для чтения документации Microsoft.
в моем случае я использую его, чтобы показать 'preloader' перед переходом к другой части моего веб-приложения, так что это соответствует 'preloader', который появляется в новой открытой странице, для эстетического изменения между страницами.
то, что он работал для меня (и я пробовал все), было так:
function myLoader() { // Show my Loader Script; } $( window ).on( 'beforeunload' , function() { myLoader(); } );