我有以下javascript来提示用户是否尝试离开页面。将出现一个对话框,其中包含2个按钮“离开此页面”和“留在此页面上”。我想引发一个会引发C#事件的回发。
我希望在按下“离开此页面”按钮时发生此回发。
我该怎么做?请原谅,我对Javascript很新。
<script type="text/javascript" language="JavaScript">
var needToConfirm = true;
window.onbeforeunload = confirmExit;
function confirmExit() {
if (needToConfirm)
return "You have attempted to leave this page. This will CANCEL your current order selection.";
}
答案 0 :(得分:1)
这里的主要挑战是在用户实际离开页面之前执行JavaScript函数,问题是处理onbeforeunload
事件,您无法对用户选择做出反应,因为为了使此事件起作用< strong>在多浏览器方案中,您必须返回一个将用作消息的字符串,并且每个浏览器将创建一个将向用户显示的自定义对话框。我没有找到更好的方法,做你需要的。基本上你不能覆盖浏览器中的默认行为,并且你不能返回bool来指示是否应该卸载页面。
欲了解更多信息:
当一个字符串被分配给window.event的returnValue属性时,会出现一个对话框,让用户可以选择保留当前页面并保留分配给它的字符串。对话框中显示的默认语句“您确定要离开此页面吗?...按”确定“继续,或”取消“以保留当前页面。”,无法删除或更改强>
所以在这个例子中,我提出了一个解决方法,我不确定这是否是最好的方法,但我在几个网上银行和微软本身登出他们的网站时都看到过这样的行为。 / p>
示例:
<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
function showConfirmOnLeave() {
return $("#showConfirm").prop("checked");
}
function onLeavePage() {
if (showConfirmOnLeave()) {
return "Don't goo";
}
else {
return undefined;
}
}
$(function () {
if ($("body").attr('onbeforeunload') == null) {
$("body").attr('onbeforeunload', 'return onLeavePage(event)');
}
$(window).unload(function (event) {
if (showConfirmOnLeave()) {
window.open(
'<%: this.ResolveClientUrl("~/CallOnLeave.aspx") %>',
"_blank",
"height=100, location=no, menubar=no, resizable=no, scrollbars=no, status=no, titlebar=no, toolbar=no, width=100, left=1, top=1",
false
);
}
});
});
</script>
<input type="checkbox" id="showConfirm" /> Show confirm on exit?
protected void Page_Load(object sender, EventArgs e)
{
// add here your custom code, ideally fire a new async thread to execute your commands on the background
}
答案 1 :(得分:0)
将window.confirm()
与__doPostBack
像这样
window.onbeforeunload = confirmExit;
function confirmExit() {
if (confirm("Want to exit ??"))
__doPostBack('btnSave ', "exit confirmed");
}
有关__doPostBack
Go here
注意:当用户点击关闭并且窗口即将关闭时,window.onbeforeunload
事件会引发,因此当我测试它时它肯定会转到服务器端,但是当客户端关闭时,请求会崩溃,并且您的服务器边代码执行将停止。所以这不是一个更好的做事方法。