这是我的代码:
<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上显示两次
答案 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>