当用户尝试离开页面时,我正在尝试显示Primefaces确认对话框。当前页面可能包含一些未保存的数据,因此会在离开页面之前询问用户是否要保存这些数据。
目前,我可以在用户点击页面时显示确认对话框,如下所示:
function onBeforeUnload_Handler(){
confirmation.show(); // confirmation is the "widgetVar" value of p:confirmDialog
}
window.onbeforeunload = onBeforeUnload_Handler;
但问题是,在显示对话框时,它会导航到其他页面而无需等待用户的响应。我希望当前页面等待用户响应并执行“保存”或“不保存”之类的操作,然后导航。
我尝试在“confirmation.show()”之后添加“return false”,但这会导致弹出浏览器警告框。
(Primefaces 3.0.M1)
非常感谢
答案 0 :(得分:1)
您可以尝试这样的事情:
<p:commandButton value="Next Page" onclick="confirmation.show();" />
<p:confirmDialog .....message="Are you sure?">
<p:commandButton value="Yes" action="nextpage?faces-redirect=true" />
<p:commandButton value="No" onclick="confirmation.hide();" />
</p:confirmDialog>
答案 1 :(得分:1)
window.onbeforeunload = function() {
return 'There are unsaved changes!';
}
从处理函数返回的值将显示在弹出对话框中。因此,您可以告诉用户有一些未保存的数据,并且他可能希望保存它,然后您可以将其留给用户,无论他是想要离开还是保留并手动保存。
或者,您可以在'onbeforeunload'处理程序中使用“同步”AJAX请求来更新对服务器的更改。它将停止浏览器,直到请求完成。它适用于IE,FF,Chrome,但不适用于Opera。
答案 2 :(得分:0)
这是为了让其他人知道我最终做了什么。我找不到任何方法来完成我使用的Primefaces版本。因此最终使用默认浏览器警告框通知用户并采取所需步骤。