保存上传到 asp:fileupload 的文件时,我可以阻止 window.onbeforeunload
Can I prevent window.onbeforeunload when saving file uploaded to asp:fileupload
我在 aspx 页
上设置 window.onbeforeunload
<script type="text/javascript">
window.onbeforeunload = ShowMessage;
function ShowMessage()
{
alert("Do you want to close?")
}
</script>
我将用户控件引向我的 aspx 页面。在我的 Ascx 控件中,我有一个文件上传和 asp 按钮。
一旦我上传了一个文件并点击按钮保存它,在它点击文件隐藏代码之前,出于某种原因 javascript 功能 ShowMessage() 正在弹出。
有什么办法可以限制这种情况的发生。当我上传文件并单击按钮保存时,我不需要弹出此消息。请建议我如何解决
Ascx.code:
<asp:UpdatePanel ID="upanel" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:PostBackTrigger ControlID="btnsave" />
</Triggers>
<ContentTemplate>
<fieldset>
<p>
<div id="div1" runat="server" >
<asp:FileUpload ID="dcupload" runat="server" />
<asp:Button ID="btnsave" runat="server" Text="Save" CausesValidation="false" />
</div>
</p>
<asp:Panel ID="UIPanelEnabled" runat="server">
<asp:GridView ID="gvresults" runat="server" AllowSorting="true" AutoGenerateColumns="false">
<Columns>
</Columns>
</asp:GridView>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
似乎问题在于页面上的任何 link 在单击时都会触发 onbeforeunload,除非它是指向同一页面的 link。
向每个 link 的 onclick 事件添加一个 "return false"(控件中的大多数元素都是 link 触发 javascript 但不去任何地方)。这是我放在页面上的代码。
$('#id').click(function (e) {
return false;
});
将javascript改为
<script type="text/javascript">
window.onbeforeunload = ShowMessage;
function ShowMessage()
{ if(this.id.indexOf("btnsave") == -1)
alert("Do you want to close?")
}
</script>
这将检查 id 包含 "btnsave" 的东西是否正在调用该函数。
您可以定义一个函数 DisableMessage
来重置 onbeforeunload
事件处理程序:
<script type="text/javascript">
window.onbeforeunload = ShowMessage;
function DisableMessage() {
window.onbeforeunload = null;
}
function ShowMessage() {
return "Do you want to close?";
}
</script>
并在按钮的 OnClientClick
事件中调用该函数:
<asp:Button ID="btnsave" runat="server" OnClientClick="DisableMessage();" ... />
顺便说一下,只要在ShowMessage
中返回一个字符串(如上所示)就可以让onbeforeunload
事件处理程序在所有浏览器中工作,如果你调用[=17就不是这样了=].
我在 aspx 页
上设置 window.onbeforeunload <script type="text/javascript">
window.onbeforeunload = ShowMessage;
function ShowMessage()
{
alert("Do you want to close?")
}
</script>
我将用户控件引向我的 aspx 页面。在我的 Ascx 控件中,我有一个文件上传和 asp 按钮。
一旦我上传了一个文件并点击按钮保存它,在它点击文件隐藏代码之前,出于某种原因 javascript 功能 ShowMessage() 正在弹出。 有什么办法可以限制这种情况的发生。当我上传文件并单击按钮保存时,我不需要弹出此消息。请建议我如何解决
Ascx.code:
<asp:UpdatePanel ID="upanel" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:PostBackTrigger ControlID="btnsave" />
</Triggers>
<ContentTemplate>
<fieldset>
<p>
<div id="div1" runat="server" >
<asp:FileUpload ID="dcupload" runat="server" />
<asp:Button ID="btnsave" runat="server" Text="Save" CausesValidation="false" />
</div>
</p>
<asp:Panel ID="UIPanelEnabled" runat="server">
<asp:GridView ID="gvresults" runat="server" AllowSorting="true" AutoGenerateColumns="false">
<Columns>
</Columns>
</asp:GridView>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
似乎问题在于页面上的任何 link 在单击时都会触发 onbeforeunload,除非它是指向同一页面的 link。
向每个 link 的 onclick 事件添加一个 "return false"(控件中的大多数元素都是 link 触发 javascript 但不去任何地方)。这是我放在页面上的代码。
$('#id').click(function (e) {
return false;
});
将javascript改为
<script type="text/javascript">
window.onbeforeunload = ShowMessage;
function ShowMessage()
{ if(this.id.indexOf("btnsave") == -1)
alert("Do you want to close?")
}
</script>
这将检查 id 包含 "btnsave" 的东西是否正在调用该函数。
您可以定义一个函数 DisableMessage
来重置 onbeforeunload
事件处理程序:
<script type="text/javascript">
window.onbeforeunload = ShowMessage;
function DisableMessage() {
window.onbeforeunload = null;
}
function ShowMessage() {
return "Do you want to close?";
}
</script>
并在按钮的 OnClientClick
事件中调用该函数:
<asp:Button ID="btnsave" runat="server" OnClientClick="DisableMessage();" ... />
顺便说一下,只要在ShowMessage
中返回一个字符串(如上所示)就可以让onbeforeunload
事件处理程序在所有浏览器中工作,如果你调用[=17就不是这样了=].