如果用户想在页面上留下未保存的表单数据,我想显示一个确认对话框。我拥有的是:
window.onbeforeunload = function() {
if (not_saved) if (confirm('Changes will not be saved')) return true;
return false;
}
但无论用户点击什么,结果都是一样的——愚蠢的硬编码对话框会询问他们是想离开页面还是留在页面上。我想问他们的是,他们是想留下还是离开,如果他们想留下,什么都不会发生,如果他们想要离开,他们就会离开。这可能吗?我可以理解浏览器是如何限制网站在保持用户在页面上的功能的,但我想我已经看到一些网站(我认为是谷歌文档)有很好的文明对话框。
window.onbeforeunload = function(e) {
return 'Dialog text here.';
};
文件:
- https://developer.mozilla.org/en-US/docs/DOM/window.onbeforeunload
- http://dev.w3.org/html5/spec-LC/history.html#unloading-文件
请注意,在Firefox 4及更高版本中,返回的字符串不会显示给用户
如果事件对象的returnValue属性不是空的字符串,或者如果事件被取消,则用户代理应该询问用户确认他们希望卸载文档。用户代理显示的提示可以包括returnValue属性的字符串或其某个前导子集。(用户代理可能希望将字符串截断为1024个字符以供显示,例如例如。)
尽管window.onbeforeunload
有效,但它被认为是不好的做法。最好使用以下内容:
if (typeof window.addEventListener === 'undefined') {
window.addEventListener = function(e, callback) {
return window.attachEvent('on' + e, callback);
}
}
window.addEventListener('beforeunload', function() {
return 'Dialog Text Here';
});
首先,我们检查window.addEventListener
是否存在,而它在IE中不存在,否则我们对其进行polyfill,然后附加事件。
使用jQuery,您可以设置相同的处理程序。代码可能会根据您的版本延迟。
function AnyFunction(e){ /**** your code *****/ };
$(function () {
$(window).bind('unload', function (e) { return AnyFunction(e); });
$(window).bind('beforeunload', function (e) { return AnyFunction(e); });
});
您也可以使用插件作为引导框来更改确认或警报功能。