如果用户想要使用未保存的表单数据离开页面,我想显示一个确认对话框.我有的是:
window.onbeforeunload = function() {
if (not_saved) if (confirm('Changes will not be saved')) return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)
但无论用户点击什么,结果都是一样的 - 愚蠢的硬编码对话框询问他们是否要离开页面或留在页面上.我想问他们的是他们是想留下还是离开,如果他们想留下什么,如果他们想要离开,他们就会离开.这甚至可能吗?我可以看到浏览器如何限制网站可以做些什么来保持用户在页面上,但我想我已经看到一些网站(我认为Google Docs)有很好的文明对话框.
Nat*_*iel 11
虽然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';
});
Run Code Online (Sandbox Code Playgroud)
首先我们检查是否window.addEventListener存在,它在IE中不存在,否则我们将其填充,然后我们附加事件.
window.onbeforeunload = function(e) {
return 'Dialog text here.';
};
Run Code Online (Sandbox Code Playgroud)
文档:
请注意,在Firefox 4及更高版本中,返回的字符串不会显示给用户.
如果事件对象的returnValue属性不是空字符串,或者事件被取消,则用户代理应该要求用户确认他们是否要卸载文档.用户代理所示的提示可以包括returnValue属性的字符串,或其某些前导子集.(例如,用户代理可能希望将字符串截断为1024个字符以供显示.)