2012-02-14 138 views
0

试图弄清楚如何在浏览器窗口退出时使模态弹出。我知道如何做一个警告框,但我想让用户在退出时回答问卷,而不是基本的“你确定要离开”警告框。窗口退出时的模态弹出

回答

1
window.onbeforeunload = function() { 
    return 'Your content has not been properly saved yet!'; 
}; 

这将使浏览器中显示这样一个确认对话框:

http://f.cl.ly/items/2L0t1k0d2U0p0Z0z1d2t/Screen%20shot%202012-02-14%20at%206.09.58%20PM.png

正如你所看到的,由该函数返回的字符串显示在盒子里。

+0

无论如何编辑“留在这个页面”和“离开这个页面”文本? – THEDert 2012-02-14 17:23:07

+0

不,我不这么认为。 – 2012-02-14 17:24:29

+0

啊,这很糟糕....感谢您的解决方案! – THEDert 2012-02-14 17:27:45

1

你不能。阻止窗口关闭的唯一方法是使用JS确认(或警报)。如果你只是弹出一个模态的页面内,窗口仍然会关闭,你永远不会看到它。您最好的选择是打开JS警报,然后将页面重定向到问题。虽然请注意,这是令人难以置信的烦人的用户。

+0

好的,所以不得不使用警示框,然后让他们留下假期,如果他们离开了,那么它会弹出一个模式? – THEDert 2012-02-14 17:08:55

+0

如果他们离开,他们走了,所以不。 – MetalFrog 2012-02-14 17:09:39

+1

您必须绑定到文档的“卸载”事件。 – bfavaretto 2012-02-14 17:10:01

1

虽然它并不总是建议穿上退出代码,你可以做这样的事情:

<body onUnload="javascript:openDialog()"> 

$(document).bind('unload', openDialog); 

然后:

function openDialog(e) { 
    e.preventDefault(); 
    $("#yourQuestionnaire").dialog('open'); 
} 

但一般避免绑定到onUnload事件是一种很好的做法,因为它的fi环在所有浏览器和情况下都不可靠。

UPDATE

文档显示它:

$(window).unload(function() { 
    alert('Handler for .unload() called.'); 
}); 

通过任何网页#1的Firefox/Firebug的控制台应用时,这对我的作品。

文档浏览:http://api.jquery.com/unload/

+1

我不认为这会起作用。无论onunload是否存在preventDefault,该窗口仍将关闭,不是吗? – 2012-02-14 17:11:44

+0

这根本行不通。任何现代浏览器都不会让你这样做。 – wdev 2012-07-30 20:50:39

+0

你是对的,我已经更新了一个更好的解决方案,并强调了警告不要使用它的部分,因为绑定到卸载通常不是一个好主意(如前所述)。 – shanabus 2012-07-31 12:50:23

1

我有类似的要求,我想使用漂亮的HTML消息,而不是默认的js消息。花了一些时间后,我终于找到了一个办法。我已经使用jQuery Colorbox模式这是非常有用的任何模式的要求,而不只是在这里。

基本上你可以使用mousemove事件,并发现如果Y坐标(e.clientY)小于5。因此,这将每次当鼠标靠近地址栏(用户键入新的URL或试图关闭窗口)时被解雇。

jQuery(document).ready(function() { 
jQuery(document).mousemove(function(e) { 
    if (e.clientY <= 5) { 
     jQuery.colorbox({initialHeight: 250, initialWidth: 250, html:'<h2>any custom HTML here</h2><br/><img src="nice-img" />'}); 
    } 
}); 

});

我发现很多使用e.pageY的例子,但是请注意,只有当用户没有向下滚动时才会触发它。所以如果你向下滚动5像素,e.pageY将不起作用,但e.clientY将工作。 e.pageY给出了抵消,而e.clientY给出绝对坐标。很重要!