javascript将body_0 $添加到ID选择器

时间:2016-03-07 14:17:48

标签: javascript c# asp.net webforms

我正在使用表单验证,而javascript只使用输入字段而不是Textboxes。我用:

 var _firstname;
 var box;

 try {
 box = $("#firstname");
 alert("You must enter a first name");
 box.focus();
 return false;
 }catch{
 }

前端:

  <div>First Name <span class="required">*</span></div>
  <asp:TextBox ID="firstname" name="firstname" runat="server" />

当我调试代码时,它会在ID的前面添加一个body_0 $(即:body_0 $ firstname),所以我猜测这就是为什么它总是弹出&#34 ;你必须输入名字&#34;警报。有工作吗?

2 个答案:

答案 0 :(得分:2)

不,JavaScript不会这样做。它是 ASP.NET WebForms运行时。您提供的ID属性由服务器端使用,不会“按原样”输出到客户端。

在默认模式下,WebForms mangles 使用id元素ID的层次结构修饰 runat="server"属性。这对WebForms很有用,因为您可以在转发器,面板等中重复使用ID,而无需在客户端上创建重复的ID。但是,对于其他任何东西来说,它都不是很好,比如浏览器或苦苦挣扎的前端开发人员。

2009年的这个老问题可能会有所帮助:

How to stop ASP.NET from changing IDs in order to use jQuery

<强>解决方案

从ASP.NET 4.0中,可以选择ClientIDMode。将其设置为PredictableStatic,如下所示:

<%@Page Language="C#"
    CodeBehind="MyFormName.aspx.cs"
    Inherits="MyWebApplication.MyFormName"
    ClientIDMode="Static" 
%> 

当您重复使用或重复服务器端控件时,请注意不要这样做,因为这会创建具有相同客户端ID的多个元素! (在dman2306评论后更新)

Read more about ClientIDMode on MSDN

答案 1 :(得分:1)

如果您的实际问题没有获得ID的值,那么使用它会怎么样?

box = $("[id*=" + 'firstname' + "]").val();

它会寻找任何&amp;所有包含字符串'firstname'

的ID

虽然在你的代码中它只是贯穿并显示警报。你对box的赋值就是控件本身,而不是值。