PostBack没有在使用Firefox的window.onbeforeunload中触发

时间:2013-05-29 09:33:24

标签: asp.net firefox postback onbeforeunload

我有一个包含框架的主页

    function attachToTheSaveWhenLeave(sender) {
    sender.onbeforeunload = function (ev) {
        sender.Save();
    };
}
<frameset cols="25%,75%">
    <frame id ="Frame1" src="LeftFrame.aspx" />
    <frame id ="frmTest" src="FrameContent.aspx" />
</frameset>

在一个框架(FrameContent.aspx)所包含的页面之一中,我需要知道页面是否被丢弃以便触发PostBack并且服务器必须保存用户所做的更改

var isPostBack = false;

window.onload = function (ev) {
    window.parent.attachToTheSaveWhenLeave(window);
}

function Save() {
    if (!isPostBack)
        $("input:submit")[0].click();
}
 <form id="formFrame" runat="server" onsubmit="isPostBack=true;">
    <div>
        <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" />
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
    </div>
    </form>

在IE中服务器收到回发但是使用Firefox我必须使用setTimeOut才能使用

function Save() {
    if (!isPostBack)
      setTimeout(function () {
        $("input:submit")[0].click();
      },1);
}

我不喜欢我找到的解决方案,而且我不理解Firefox的行为。 任何人都可以向我解释为什么Firefox会以这种方式表现,如果有其他方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

没有替代品,但Firefox似乎表现得有记录(https://developer.mozilla.org/en-US/docs/Web/API/window.onbeforeunload)。 onbeforeunload的目的只是在离开页面时提示。

或许jquery.unload(http://api.jquery.com/unload/)或window.onunload就是您的想法。