我正在使用进行表单验证,而javascript仅适用于输入字段,而不适用于文本框。我用:

 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),因此我猜测这就是为什么它总是弹出“您必须输入名字”警报的原因。有没有解决的办法?

最佳答案

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

在其默认模式下,WebForms修饰用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

关于javascript - javascript将body_0 $添加到ID选择器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35846039/

10-12 00:36
查看更多