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