如果表单信息已更新(album.updated = true),我在窗口卸载时提交表单时遇到问题:
window.onunload = 函数(evnt){ 如果(专辑。更新){ var save = confirm('是否要保存更改?'); 如果(保存){ alert('提交表单...'); document.edit_photos.submit(); } } }
它提醒“提交表单”,但没有保存任何内容。但是,当我使用“保存”按钮进行常规提交时 - 它会保存信息。这里有什么问题?
如果表单信息已更新(album.updated = true),我在窗口卸载时提交表单时遇到问题:
window.onunload = 函数(evnt){ 如果(专辑。更新){ var save = confirm('是否要保存更改?'); 如果(保存){ alert('提交表单...'); document.edit_photos.submit(); } } }
它提醒“提交表单”,但没有保存任何内容。但是,当我使用“保存”按钮进行常规提交时 - 它会保存信息。这里有什么问题?
您无法通过unload
事件可靠地与服务器交互。
发送 AJAX 请求可能更可靠一些,但也不应该依赖。
相反,您应该处理onbeforeunload
事件和return "You have unsaved changes";
.
这将指示浏览器显示允许用户取消导航的确认对话框。(之后他可以手动保存)
你不会在unload
. 曾经允许更多,但不良网站会诱骗和迷惑用户,因此已被锁定。
您唯一可以获得的交互是通过onbeforeunload
. 而且您也不能可靠地提示在此处保存……通常不允许您通过直接提交表单来规避导航。您可以尝试使用 发布保存请求XMLHttpRequest
,但不能保证它会在页面导航离开之前到达服务器。
所以你所能做的就是提醒用户注意未保存的数据,提示他们取消导航并自己保存数据:
window.onbeforeunload= function() {
if (album.updated)
return (
'You have unsaved changes to this album. Are you sure you wish '+
'to leave without saving?'
);
};