2

如果用户尝试离开页面,我有以下 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.";
}

4

2 回答 2

1

这里的主要挑战是在用户真正离开页面之前执行 JavaScript 函数,问题是处理onbeforeunload事件,你无法对用户的选择做出反应,因为为了让这个事件在多浏览器场景中工作,你必须返回将用作消息的字符串,每个浏览器将创建一个自定义对话框,该对话框将显示给用户。我还没有找到更好的方法来做你需要的。基本上你不能覆盖浏览器的默认行为,你不能返回一个布尔值来指示页面是否应该被卸载。

欲了解更多信息:

来自 MSDN

将字符串分配给 window.event 的 returnValue 属性时,会出现一个对话框,让用户可以选择留在当前页面并保留分配给它的字符串。对话框中显示的默认语句“您确定要离开此页面吗?...按 OK 继续,或按 Cancel 留在当前页面。”无法删除或更改。

所以在这个例子中,我提出了一个解决方法,我不确定这是否是最好的方法,但我在几家在线银行和微软本身在他们的网站注销时看到了这样的行为。

例子:

ASPX

<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?

CallOnLeave.ASPX 代码后面

    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
    }
于 2012-07-21T12:54:58.367 回答
0

window.confirm()与___doPostBack

像这样的东西

window.onbeforeunload = confirmExit;
function confirmExit() {
    if (confirm("Want to exit ??"))
          __doPostBack('btnSave ', "exit confirmed");

}

更多关于__doPostBack 去这里

注意:window.onbeforeunload当用户单击关闭并且窗口即将关闭时会引发事件,因此在我测试它时它肯定会转到服务器端,但请求会在客户端关闭时崩溃,并且您的服务器端代码执行将停止。因此,这不是做事的更好方法。

于 2012-07-21T10:10:14.480 回答