在JavaScript中访问隐藏字段的值

3
我有一个隐藏字段在我的表单中,我在服务器上设置了隐藏字段的值,并试图从javascript中访问这个值,
但是我收到了错误提示:无法获取'值'属性的值:对象为空或未定义。
如果我查看源代码,隐藏字段的值已经被设置了,并且隐藏字段的ID与我调用的ID相同。
ASPX
            var v = document.getElementById('hxValue').value;
            <asp:HiddenField ID="hxValue" runat="server"/>

VB

            hxValue.Value = "Value1"

我记得以前做过这个,应该相对简单,但出于某种原因,我现在做不对了。
5个回答

5
你的代码会起作用。对于简单的表单,只需要添加以下内容:
<asp:HiddenField ClientIDMode="static" ID="hxValue" runat="server"/>

您需要使用以下方法查找客户端ID:

'<%=hxValue.ClientID%>'

4

好的,看起来我的隐藏字段的值在脚本运行之前没有被设置,因此收到了一个空值。我曾经以为在服务器页面加载和脚本上设置断点可以确定控件是否在脚本运行之前被设置,但事实并非如此。

已修复如下:

            <html xmlns="http://www.w3.org/1999/xhtml" >
            <head>

            <title></title>

            <script type="text/javascript">
                function GetHiddenValues() {
                    var v = document.getElementById('<%= hxValue.ClientID %>').value;
                }
            </script>
            </head>

            <body onload="GetHiddenValues() ;">

            <form runat="server">

            <asp:HiddenField ClientIDMode="static" ID="hxValue" runat="server"/>

            </form>
            </body>
            </html>

感谢您提供的所有帮助。

谢谢,这个可行。不需要在onload中运行,以防混淆任何人。 - Off The Gold

2

您可以使用 innerText 而不是 value 来获取 hxValue 的值。

var v = document.getElementById('hxValue').innerText

如果你使用 jQuery ,也可以这样做:
var v = $("#hxValue").val();

1
我尝试使用innerText,但出现以下错误信息 - "无法获取属性'innerText'的值:对象为null或未定义@Darren Davies" - user1835316
ID在客户端上可能实际上不叫做hxValue,因为ASP.NET可能会添加它自己的前缀。像yogi建议的那样尝试:document.getElementById('<%= hxValue.ClientID %>').value;。 - Darren
由于经典 ASP.NET 使用的控件概念,生成的 HTML 中的控件 ID 不是您在服务器端使用的那些 ID(ASP.NET 允许在页面上具有相同 ID 的多个元素,但在一个父元素内只能有一个)。 - Nikola Radosavljević
@NikolaRadosavljević 但是当我在运行时查看源代码时,反映的控件ID肯定是已经分配给它的ID,不是吗? - user1835316
在渲染的HTML中看到的ID是您想要的ID。在调试时在Visual Studio中看到的ID不同。在Visual Studio调试器中,您应该查看ClientID。在.NET 4中,引入了ClientIDMode以允许更可预测的ID生成。 - Nikola Radosavljević
谢谢您提供的信息@NikolaRadosavljević。虽然我正在访问正确的ID,但我的控件在脚本运行之前没有被设置。 - user1835316

1

试试这个

var v = document.getElementById('<%= hxValue.ClientID %>').value;

问题在于Hidden Field是服务器端控件,您给定的ID是服务器端ID,您需要获取该控件的客户端ID以便在客户端JavaScript或JQuery中引用它。 更新 将此脚本放置在页面末尾,就在</body>之前,类似于这样。
<script type="text/javascript" language="javascript">
  var v = document.getElementById('<%= hxValue.ClientID %>').value;
</script>
</body>

好的,我已经尝试按照上述方法获取控件的客户端ID,但仍然无法获取值,我得到的是对象为空或未定义。 - user1835316
请使用Jquery Ready方法在页面加载完成后访问,请获取变量v的值,该变量对应的元素ID为'<%= hxValue.ClientID %>'。 - Naresh Pansuriya

0

尝试使用<asp:HiddenField ID="hxValue" runat="server" Value=""/>
然后通过id调用并设置值


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接