对话框运行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(); }); }); 

beforeunload使用内置于浏览器的方法,您需要返回一个string,浏览器将显示string,并询问用户是否要离开页面。

您不能使用自己的对话框(或jQueryUI模式对话框)来覆盖beforeunload

beforeunload不能将用户redirect到另一个页面。

 $(window).on('beforeunload', function(){ return 'Are you sure you want to leave?'; }); 

这会popup一个警告框,提示'Are you sure you want to leave?' 并询问用户是否要离开该页面。

(更新:Firefox不显示您的自定义消息,它只显示自己的。)

如果你想在页面卸载的时候运行一个函数,你可以使用$(window).unload() ,注意它不能阻止页面卸载或者redirect用户。 (更新:Chrome和Firefox阻止在unload警报。)

 $(window).unload(function(){ alert('Bye.'); }); 

演示: http : //jsfiddle.net/3kvAC/241/

更新:

$(...).unload(...)从jQuery v1.8开始已被弃用 ,而是使用:

 $(window).on('unload', function(){ }); 

您也可以使用Microsoft推出的以下卸载方法来实现此目的。 点击这里查看现场演示。

 function closeIt() { return "Any string value here forces a dialog box to \n" + "appear before closing the window."; } window.onbeforeunload = closeIt; 

点击阅读Microsoft文档。

在我的情况下,我使用它来显示一个“preloader”之前,去我的web应用程序的另一部分,所以这匹配与“preloader”出现在新页面打开,页面之间的美学改变。

它对我的工作(我试了一切),是这样的:

 function myLoader() { // Show my Loader Script; } $( window ).on( 'beforeunload' , function() { myLoader(); } );