2010-01-08 205 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