2010-01-08 28 views
30

Tại sao tôi không thể lấy giá trị của trường bị ẩn này?Trường Jquery Hidden

Tôi có một điều khiển ...

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

Những ám như ...

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

Mà tôi đang cố gắng để có được giá trị của việc sử dụng ...

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

Vì vậy, có gì sai?

tôi thích điều này

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

Trả lời

57

Bởi vì jQuery không biết gì về asp:HiddenField. Nó trông trong cấu trúc HTML nơi bạn có <input type="hidden" name="ctl00$cph_main$HiddenFieldServerDateTime" id="ctl00_cph_main_HiddenFieldServerDateTime" .... Vì vậy, không có đầu vào với ID= HiddenFieldServerDateTime. Có một vài cách để khắc phục điều này:

  • Sử dụng một selector css:

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

    với bộ chọn sau: var serverDateTime = $(".SomeStyle").val();

    CssClass không được một lớp có sẵn trên lớp HiddenField (và nó không có một bộ sưu tập Attributes, vì vậy bạn không thể thêm nó theo cách thủ công).

  • Sử dụng ClientID tài sản:

    var serverDateTime = $("#<%= HiddenFieldServerDateTime.ClientID %>").val(); 
    
  • Bó lĩnh vực ẩn trong một cái gì đó bạn có thể chọn:

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

     

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

Thankyou! Điều đó làm cho ý nghĩa hoàn toàn – Dooie

+1

@Darin Một chút muộn cho bên nhưng tôi đăng một câu trả lời rằng thêm một tài sản 'CssClass' để' HiddenField'. Làm điều này làm cho phần gạch chéo của bạn hợp lệ. – Rozwel

+0

Tôi không nghĩ đến việc gói nó trong một yếu tố khác. Ý tưởng tốt. –

1

Thêm một c Thuộc tính lass ".myHiddenValue" vào thẻ sau đó sử dụng

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

hoặc vì điều này sẽ làm sau khi tải tài liệu của tôi sử dụng tư vấn này

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

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

thankyou! Câu trả lời của bạn và Darin Dimitrov thực sự đã giúp – Dooie

4

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

7

này sẽ làm việc tốt bằng cách sử dụng jQuery để chọn tất cả các ID kết thúc bằng _ HiddenFieldServerDateTime.

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

Tôi chỉ chạy vào một vấn đề tương tự và câu trả lời của tôi là để thực hiện một điều khiển mới mà kế thừa từ HiddenField và cung cấp cho nó một tài sản 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); 
    } 
} 

bây giờ tôi có thể gán một lớp học để các trường ẩn của tôi và sử dụng giá trị lớp để tìm trường chính xác ở phía máy khách.

Cũng cần lưu ý rằng trong trường hợp của tôi, các trường ẩn đang được tạo động theo mã phía sau, ở trên có thể cần một số cải tiến để có thể sử dụng được trong nhà thiết kế.

Hy vọng điều này sẽ giúp người khác trên đường đi.

+0

Rực rỡ! Điều này đã lưu mông của tôi! –

20

Tôi biết điều này đã được trả lời và giải quyết nhưng dưới đây là hai cách tốt hơn (theo ý kiến ​​của tôi) và các lựa chọn thay thế đơn giản hơn. Nếu bạn đang sử dụng .NET4 (hoặc cao hơn), bạn có thể sử dụng ClientIDMode = "tĩnh" để buộc ID của bạn sẽ được sử dụng trong HTML được tạo ra:

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

có nghĩa là bạn có thể làm điều này trong JQuery của bạn:

var serverDateTime = $('#HiddenFieldServerDateTime').val(); 

hoặc nếu bạn muốn sử dụng các tuyến đường lớp css sau đó sử dụng một bình thường ASP: TextBox (trong đó có một thuộc tính CssClass) nhưng chỉ không hiển thị nó:

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

cho phép bạn làm điều này:

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

Lưu ý rằng lớp css bạn sử dụng không phải thực sự được khai báo ở bất kỳ đâu. Bạn chỉ có thể sử dụng nó làm điểm đánh dấu.

+0

Tôi thích tùy chọn hộp văn bản. ClientIDMode = Tĩnh có vẻ nguy hiểm với tôi, nhưng sau đó tôi dành rất nhiều thời gian để xây dựng các điều khiển cần phải chơi tốt đẹp khi có nhiều phiên bản của chúng. – Rozwel

+0

ClientIDMode hoạt động tốt cho một điều khiển duy nhất, nhưng không tốt trong bộ lặp vì tất cả chúng đều có cùng một ID. – bperniciaro

Các vấn đề liên quan