访问 JavaScript 中更改的隐藏字段值

Access Changed HiddenField Value in JavaScript

我有一个 JavaScript 依赖于 HiddenField 值。这个 HiddenField,我们称之为 needUpdate,是一个布尔值,当我页面上的 div 需要用 JavaScript 更新时,它会被设置为 true。 needUpdate 位于通过 Timer 更新的 UpdatePanel 中。我尝试了两种不同的方法,但都成功了一半。第一种是将 JavaScript 放在更新面板之外,并使用我的 PageRequestManager 实例到 运行 脚本,如下所示:

<asp:ScriptManager ID="scriptManager" runat="server" />

<script type="text/javascript">
    function DoUpdate(sender, args)
    {
        if ('<%= needUpdate.Value %>' == 'true') {
            // Code here... //
        }
    }
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(DoUpdate);
</script>

 <asp:UpdatePanel ID="replay" runat="server" Visible="false" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="replayTimer" EventName="Tick" />
    </Triggers>
    <ContentTemplate>
        <asp:HiddenField ID="needUpdate" runat="server" Value="false"/>
        <asp:Timer ID="replayTimer" runat="server" Interval="500" OnTick="replayTimer_Tick" />
        <!-- More Stuff Here -->
    </ContentTemplate>
</asp:UpdatePanel>

<div id="divToUpdate"></div>

现在上面的 运行 是脚本,但是 needUpdate 中的值永远不会改变,即使它在后端被改变了。因此,我尝试了下一段代码,将脚本放在 UpdatePanel

ContentTemplate 区域
    <ContentTemplate>
        <asp:HiddenField ID="needUpdate" runat="server" Value="false"/>
        <asp:Timer ID="replayTimer" runat="server" Interval="500" OnTick="replayTimer_Tick" />

        <script type="text/javascript">
            function DoUpdate()
            {
                if ('<%= hf_needUpdate.Value %>' == 'true') {
                    // Code here... //
                }
            }
            DoUpdate();
        </script>
        <!-- More Stuff Here -->
    </ContentTemplate>
</asp:UpdatePanel>

虽然这更新了脚本区域,但从未调用过代码。关于如何通过 UpdatePanel 更改值以提供 JavaScript 函数的任何想法?

您将错误结果硬编码到 JavaScript if 语句中。进入页面的内容:

'<%= hf_needUpdate.Value %>' == 'true' ??

'false' == 'true' ??

这永远不会改变您需要获取隐藏字段的当前值。

var needUpdate = document.getElementById("needUpdate").value;
if(needUpdate == "true) {
     // Do work
}