我有一个 ASP.Net 网页,其中包含 ASP:Timer 控件
<asp:Timer ID="TimerRefresh" runat="server" Interval="5000" Enabled="true" OnTick="TimerRefresh_Tick">
</asp:Timer>
它通过页面中的 asp:UpdatePanel 链接到,以便异步刷新页面的特定部分。
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div class="TopRow" id="TopRowPlace" runat="server">
... More HTML Code here...
</div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="TimerRefresh" />
</Triggers>
</asp:UpdatePanel>
问题在于,当用户执行某些操作时,包含异步更新的 HTML 的 DIV 标记可能会被隐藏(通过在样式中将显示属性设置为 none)。发生这种情况时,无需更新内容,因为它是隐藏的。
JavaScript 中是否有一种方法可以禁用计时器运行和异步回发,并且确实可以在 DIV 标记再次可见时重新启用它?
最佳答案
我查看了由我的一个 WebForm 上的计时器添加到 BODY.onload 事件的 JavaScript。我认为修改起来并不容易,除非您真的想覆盖计时器的属性(并将其与更多客户端 JavaScript 混合)。 那么,当您说:
时,您的 DIV 中会发生什么?...which is updated asychronously can be hidden (...) when a user performs certains actions.
这些操作是在服务器上执行的吗?如果是这样,您可以禁用服务器上的计时器来响应 DIV 中的事件。
我在 WebForm 中有一个带有复选框的 UpdatePanel; CheckBox AutoPostBacks 并具有 CheckedChanged 事件处理程序。如果选中复选框,则启用计时器,并且 UpdatePanel 的内容会在每次勾选时更新 - 如果未选中复选框,则禁用计时器。即使计时器被禁用,自动回发也能正常工作。
如果您在 DIV 中使用客户端 JavaScript,我仍然认为 AutoPostBack 将是最简单的解决方案。
关于asp.net - 使用 JavaScript 禁用和重新启用 asp.net Timer 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/733713/