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

时间:2012-08-23 06:25:51

标签: c# javascript jquery

这是我的代码:

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

2 个答案:

答案 0 :(得分:1)

真正应该做的所有beforeunload处理程序都返回一个字符串,然后浏览器会在“你确定要离开”对话框中显示该字符串。如果用户单击“确定”,则会发生任何导航;如果他们点击取消,则不会。请查看here了解更多详情。

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

你有问题,我希望,因为你试图在处理程序中执行回发,并且回发本身会导致卸载。如果浏览器故意在处理程序中停止此类行为,我不会感到惊讶,因为恶意网站可能会使用它来阻止您离开。

根据您的更新:只有某些浏览器甚至允许 beforeunoad行为。根据它的外观,Firefox会这样做,所以你得到两个对话框 - 你的confirm然后是浏览器的默认对话框。从它的外观来看,Chrome没有,所以你的活动永远不会被调用。 (或者,如果事件发生意外情况,Chrome可能会忽略该事件,例如回发。)

答案 1 :(得分:-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>