0

这是我的代码:

<script type="text/javascript">
$(document).ready(function () {
    $(window).bind('beforeunload', function () {
        alert("unload");
        if (closeIt())
            $("#<%=Button1.ClientID %>").trigger('click');

    });
    function closeIt() {
        var ans = confirm("save current layout ?");
        if (ans) return true;

    }
});
</script> 
<asp:Button ID="Button1" runat="server" OnClick="btnSaveState_Click" style="display:none;" />

新问题是确认消息在 Firefox 和非 chrome 上显示两次

4

2 回答 2

1

处理beforeunload程序真正应该做的就是返回一个字符串,然后浏览器将其显示在“你确定你想离开”对话框中。如果用户单击确定,则将发生任何导航;如果他们单击取消,则不会。在这里查看更多详细信息。

这里通常要做的事情是显示一条消息(通过返回一个字符串,而不是调用confirm你自己)沿着“你即将失去对当前布局所做的更改;你确定要离开?” 然后让用户自己单击取消,然后单击保存,如果他们不关心,则单击确定。

我预计您遇到了问题,因为您正在尝试在处理程序中执行回发,而回发本身会导致卸载。如果浏览器故意在处理程序中停止这种行为,我不会感到惊讶,因为恶意网站可以使用它来阻止您离开。

根据您的更新:只有某些浏览器甚至允许 beforeunoad行为。从外观上看,Firefox 确实如此,因此您会看到两个对话框 - 您的对话框confirm,然后是浏览器的默认对话框。从外观上看,Chrome 没有,因此您的活动永远不会被调用。(或者如果 Chrome 做了一些意想不到的事情,比如回发,它可能会忽略该事件。)

于 2012-08-23T07:39:45.033 回答
-1

尝试这个:

<asp:Button ID="Button1" runat="server" Text="Button"  CausesValidation="False" onclick="btnSaveState_Click"  onclientclick="return confirm('Are you sure you want to delete?')" />

或者,您可以查看 ASP.Net Ajax<ajaxToolkit:ConfirmButtonExtender>

于 2012-08-23T06:44:53.810 回答