大部分情况是,在表单编辑页面,或者一些用户交互性比较强的页面,我们希望当用户刷新或关闭页面的时候,能够弹出一个确认对话框,询问用户是否真的要离开该页面。
如果用户选择确认离开,浏览器将关闭或者刷新页面,否则就保持停留在当前页面。
关键概念:当浏览器窗口关闭或者刷新的时候会触发 beforeunload 事件,但是不会自动触发弹出确认对话框。
然而,触发弹出确认对话框,可以有效防止用户误操作导致数据丢失。
那么如何触发呢,请看下文。
触发弹出确认对话框有以下两种方式:
注意:设置 event.returnValue 这种方式兼容性差,目前的浏览器基本不支持,需要谨慎使用。
为避免意外弹出窗口,仅在用户与页面产生交互(如点击、输入)后,才会触发。否则浏览器可能不会显示在 beforeunload 事件中创建的提示,甚至根本不会显示它们。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<input id="inputField" />
<script>
let isModified = false;
document.getElementById('inputField').addEventListener('input', () => {
isModified = true;
});
window.addEventListener('beforeunload', (event) => {
if (isModified) {
event.preventDefault(); // 必须调用
event.returnValue = ''; // 旧浏览器需要非空字符串
}
});
</script>
</body>
</html>