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();
Ответы
Ответ 1
Потому что jQuery ничего не знает о asp:HiddenField
. Он выглядит в структуре HTML, где у вас есть <input type="hidden" name="ctl00$cph_main$HiddenFieldServerDateTime" id="ctl00_cph_main_HiddenFieldServerDateTime" ...
. Таким образом, нет ввода с 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();
Ответ 2
Я знаю, что это уже было ответировано и разрешено, но вот два лучше (на мой взгляд) и более простые альтернативы. Если вы используете .NET4 (или выше), вы можете использовать ClientIDMode = "Static", чтобы заставить ваш идентификатор использоваться в сгенерированном HTML:
<asp:HiddenField ID="HiddenFieldServerDateTime" runat="server" ClientIDMode="Static" />
что означает, что вы можете сделать это в своем JQuery:
var serverDateTime = $('#HiddenFieldServerDateTime').val();
или если вы хотите использовать маршрут класса css, используйте обычный ASP: TextBox (который имеет атрибут CssClass), но просто не отображать его:
<asp:TextBox ID="HiddenFieldServerDateTime" runat="server" style="display:none" CssClass="MyStyle"></asp:TextBox>
который позволяет это сделать:
var serverDateTime = $('.MyStyle').val();
Обратите внимание, что класс css, который вы используете, не должен быть фактически объявлен нигде. Вы можете просто использовать его как маркер.
Ответ 3
Я просто столкнулся с подобной проблемой, и мой ответ состоял в том, чтобы создать новый элемент управления, который наследует от 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);
}
}
Теперь я могу назначить класс моим скрытым полям и использовать значение класса, чтобы найти правильное поле на стороне клиента.
Также стоит отметить, что в моем случае скрытые поля создаются динамически в коде позади, вышеупомянутое может нуждаться в некоторых улучшениях, которые могут использоваться в дизайнере.
Надеюсь, это поможет кому-то еще на этом пути.
Ответ 4
Это также сработает, используя jQuery для выбора всех идентификаторов, заканчивающихся _HiddenFieldServerDateTime.
var myVal = $("[id$='_HiddenFieldServerDateTime']").val();
Ответ 5
<input type="hidden" ID="HiddenFieldServerDateTime" runat="server" class="HiddenFieldServerDateTime" />
Ответ 6
Добавьте атрибут класса ".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