如果确认消息,则触发单击事件

trigger a click event if confirmation message

本文关键字:单击 事件 确认 消息 如果      更新时间:2023-09-26

这是我的代码:

<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 上显示两次

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

这里通常要做的事情是显示一条消息(通过返回字符串,而不是自己调用confirm),内容如下:"您将丢失对当前布局所做的更改;您确定要离开吗?",然后让用户自己单击"取消",然后单击"保存",如果他们不在乎,则单击"确定"。

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

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

试试这个:

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