jQuery.validate无法验证嵌套表单,如何定位frmPartialBusinessProfile?
嵌套表单下Kendo验证的解决方法
问题根源是HTML规范不允许表单嵌套,浏览器解析时会自动修正DOM结构——要么把内层的frmPartialBusinessProfile移出外层表单,要么直接忽略它的存在,导致你用$('#frmPartialBusinessProfile')找不到目标元素,自然无法调用valid()。
给你几个可行的解决思路:
放弃表单嵌套结构,把内层
<form id="frmPartialBusinessProfile">改成普通<div>容器,然后给这个容器单独初始化Kendo Validator:// 初始化验证器 var partialValidator = $("#frmPartialBusinessProfile").kendoValidator().data("kendoValidator"); // 执行验证 if (partialValidator.validate()) { // 验证通过后的逻辑 }这种方式不需要依赖表单标签,只要容器内的表单控件有对应的验证属性(比如
required、data-val-*)就能正常工作。如果需要保留两个表单的独立提交逻辑,不要嵌套放置,把
frmPartialBusinessProfile放在frmMain的外面,通过Kendo Wizard的步骤切换来控制显示。这样两个表单都是独立的DOM节点,不会被浏览器干扰,直接调用$('#frmPartialBusinessProfile').valid()就能正常验证。若必须保留原有结构的视觉嵌套,直接针对内层的表单控件组初始化验证,跳过表单标签的依赖:
var validator = $("#frmPartialBusinessProfile").kendoValidator({ rules: { // 自定义验证规则示例 customRule: function(input) { if (input.is("[data-custom-rule]")) { return input.val().length > 5; } return true; } }, messages: { customRule: "输入内容长度必须大于5" } }).data("kendoValidator"); // 触发验证 var isValid = validator.validate();
内容的提问来源于stack exchange,提问作者user1257758
相关产品推荐
相关产品推荐

