You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery Validation无法检测动态添加输入框的错误问题排查

解决ASP.NET Core动态添加输入框的验证失效问题

核心问题分析

jQuery Validation + Unobtrusive Validation的工作逻辑是:页面加载时解析带有data-val前缀属性的元素,绑定验证规则。动态新增元素时,仅修改name属性不够,还要确保验证元数据、关联的错误提示元素与新输入框完全匹配,同时正确执行验证初始化逻辑。

具体修复步骤

1. 复制元素时同步更新所有关联属性

复制输入框时,要把对应的错误提示span一并复制,并且同步修改以下关键属性:

  • 输入框的id和name:遵循ASP.NET的List命名规则,比如原Items[0].Name改为Items[1].Name,id对应改为Items_1__Name
  • 错误提示span的id(如Items_0__Name-error改为Items_1__Name-error)和for属性(必须与新输入框的id完全一致)
  • 保留输入框上所有data-val-*属性(比如data-val="true"、data-val-required="此项必填"),这些是验证规则的核心依据

示例代码片段:

// 获取最后一个输入组容器
const lastInputGroup = $('.input-group').last();
const newInputGroup = lastInputGroup.clone();

// 提取并计算新索引
const lastIndex = parseInt(lastInputGroup.find('input').attr('name').match(/\[(\d+)\]/)[1]);
const newIndex = lastIndex + 1;

// 更新输入框的id和name
const newInput = newInputGroup.find('input');
newInput.attr('id', `Items_${newIndex}__Name`);
newInput.attr('name', `Items[${newIndex}].Name`);

// 更新错误提示span的id和for属性
const errorSpan = newInputGroup.find('.field-validation-error');
errorSpan.attr('id', `Items_${newIndex}__Name-error`);
errorSpan.attr('for', `Items_${newIndex}__Name`);

// 清空输入内容和错误提示文本
newInput.val('');
errorSpan.text('');

// 将新输入组添加到页面
$('.input-container').append(newInputGroup);

2. 正确重新初始化验证

直接调用$.validator.unobtrusive.parse(document)会重复解析所有元素,容易引发规则冲突。正确做法是针对新增元素单独处理:

// 先清除新增输入框可能残留的旧规则
newInput.rules('remove');

// 仅解析新增的输入组容器,而非整个文档
$.validator.unobtrusive.parse(newInputGroup);

3. 触发验证的正确方式

如果调用$('form').valid()仍未触发新增元素的验证,可以手动触发单个元素的验证:

// 验证单个新增输入框
newInput.valid();
// 或验证整个表单
$('form').valid();

关键注意事项

  • id与for属性必须严格匹配:Unobtrusive Validation通过输入框的id关联错误提示span,仅修改name会导致验证提示无法正确绑定
  • 避免重复解析全局元素:多次解析整个文档会导致验证规则重复绑定,引发异常或失效
  • 完整保留验证元数据:新增输入框必须携带所有data-val开头的属性,否则验证规则无法被识别

内容的提问来源于stack exchange,提问作者bzmind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 20:39:05