2010-01-08 217 views
30

为什么我不能得到这个隐藏字段的值?Jquery隐藏字段

我有控制...

<asp:HiddenField ID="HiddenFieldServerDateTime" runat="server" /> 

这使得作为...

<input type="hidden" name="ctl00$cph_main$HiddenFieldServerDateTime" id="ctl00_cph_main_HiddenFieldServerDateTime" value="08/01/2010 10:54:11" 

这我试图让使用的值...

var serverDateTime = $("#HiddenFieldServerDateTime").attr('value'); 

那又怎么了?

我喜欢这个

var dateTime = $("[id$=_HiddenFieldServerDateTime]").val(); 

回答

57

因为jQuery一无所知asp:HiddenField。它看起来在你有<input type="hidden" name="ctl00$cph_main$HiddenFieldServerDateTime" id="ctl00_cph_main_HiddenFieldServerDateTime" ...的HTML结构中。所以ID= HiddenFieldServerDateTime没有输入。有几种方法来解决这个问题:

  • 使用CSS选择器:

    <asp:HiddenField ID="HiddenFieldServerDateTime" 
           runat="server" 
           CssClass="SomeStyle" /> 
    

    有以下选择:var serverDateTime = $(".SomeStyle").val();

    CssClass未在HiddenField类可用类(并且它没有Attributes集合,所以您不能手动添加它)。

  • 使用ClientID属性:

    var serverDateTime = $("#<%= HiddenFieldServerDateTime.ClientID %>").val(); 
    
  • 包裹的东西隐藏字段,你可以选择:

    <div class="date-time-wrap"> 
        <asp:HiddenField ID="..." runat="server" /> 
    </div> 
    

     

    var serverDateTime = $('.date-time-wrap input[type=hidden]').val(); 
    
+0

谢谢!这是完全有道理 – Dooie 2010-01-08 11:39:43

+1

@Darin晚会有点晚,但我发布了一个答案,它将'CssClass'属性添加到'HiddenField'。这样做会使划掉的部分有效。 – Rozwel 2012-01-06 16:39:35

+0

我没想过把它包装在另一个元素中。好主意。 – 2012-04-11 13:41:31

1

添加一个C姑娘属性“.myHiddenValue”的标签,然后使用

var myVal = $(".myHiddenValue").val() 

或因为这加载文档我的建议使用这种

$(document).ready(function(){ 
    var myVal = $("input[name='ctl00$cph_main$HiddenFieldServerDateTime']").val(); 
} 
); 

Note: also applies for the first example as well 
+0

谢谢!你的回答和达林季米特洛夫真的有帮助 – Dooie 2010-01-08 11:40:20

4

<input type="hidden" ID="HiddenFieldServerDateTime" runat="server" class="HiddenFieldServerDateTime" />

7

这将工作,以及使用后会令jQuery选择所有以__H_FieldServerDateTime_结尾的ID。

var myVal = $("[id$='_HiddenFieldServerDateTime']").val(); 
10

我只是碰到了类似的问题,我的回答是,使一个新的控制从HiddenField继承并赋予它一个CssClass属性:

public class HiddenFieldWithClass : HiddenField 
{ 
    [CssClassProperty] 
    [DefaultValue("")] 
    public virtual string CssClass 
    { 
     get 
     { 
      string Value = this.ViewState["CssClass"] as string; 
      if (Value == null) 
       Value = ""; 
      return Value; 
     } 
     set 
     { 
      this.ViewState["CssClass"] = value; 
     } 
    } 

    protected override void Render(HtmlTextWriter writer) 
    { 
     if (this.CssClass != "") 
     { 
      writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass); 
     } 
     base.Render(writer); 
    } 
} 

我现在能够将类分配给我的隐藏字段并使用类值在客户端找到正确的字段。

也许值得注意的是,在我的例子中隐藏的字段是在后面的代码中动态创建的,上面可能需要一些增强在设计器中可用。

希望这可以帮助别人。

+0

太棒了!这救了我的屁股! – 2013-04-11 16:47:38

20

我知道这已经得到了回答和解决,但这里有两个更好的(在我看来)和更简单的替代品。

<asp:HiddenField ID="HiddenFieldServerDateTime" runat="server" ClientIDMode="Static" /> 

这意味着你可以在JQuery的做到这一点::

如果正在使用.NET4(或以上),可以使用的ClientIDMode =“静态”来强制ID以在生成的HTML被用于
var serverDateTime = $('#HiddenFieldServerDateTime').val(); 

,或者如果你想使用的CSS类路径,然后使用正常的ASP:文本框(其中有一个的CssClass属性),但就是不显示它:

<asp:TextBox ID="HiddenFieldServerDateTime" runat="server" style="display:none" CssClass="MyStyle"></asp:TextBox> 

,它允许你这样做:

var serverDateTime = $('.MyStyle').val(); 

请注意,您使用的css类不必在任何地方实际声明。您可以将其用作标记。

+0

我喜欢文本框选项。 ClientIDMode = Static对我来说似乎很危险,但是后来我花了很多时间来构建控件,当它们有多个实例时,这些控件需要发挥很好的作用。 – Rozwel 2012-04-11 17:12:58

+0

ClientIDMode适用于单个控件,但在中继器中效果不佳,因为它们都会获得相同的ID。 – bperniciaro 2014-07-19 05:19:52