jQuery 使用附加的表单元素进行验证
jQuery Validate with appended form element
我已经阅读了关于 SO 的四个相关答案,它们构成了我在这里尝试的动态验证的主要部分。
我有一个表单,其中包含一些动态操作,例如添加和删除包含用户研究或经验的块 (div)。每个块都包含一些我需要验证的元素。
仅当您聚焦然后提交表单时,对附加元素的验证才有效,在此之前,如果您不聚焦元素,例如 "study_5" 并提交表单,它将被提交没问题(即使它有所需的标签)
这是我的 JS:
var multiple_formation_max_fields = 10;
var multiple_formation_wrapper = $(".multiple-formation");
var multiple_formation_add_button = $(".add_formation");
var x = {{ Auth::user()->candidate and Auth::user()->candidate->certifications->count() > 0 ? Auth::user()->candidate->certifications->count() + 1 : 1}};
$(multiple_formation_add_button).click(function (e) {
e.preventDefault();
if (x < multiple_formation_max_fields) {
x++;
$(multiple_formation_wrapper).append(
'<div class="sub-form">' +
// deleted unusfull code
'<div class="col-lg-6">' +
'<span class="pf-title">Établissement</span>' +
'<div class="pf-field">' +
'<input type="text" class="form-control" required id="formation_establishment_'+x+'" placeholder="ISET, Esprit, .. " name="formation_establishment[]">' +
// deleted unusfull code
'</div>' +
'</div>' +
'</div>'
);
}
$('.date').dateDropper();
$(".chosen").chosen();
$('#formation_establishment_'+x).rules('add', {
'required': true
});
$('#form').validate();
});
结果就像我点击提交一样,没有关注附加到表单的第二个元素:
第一个经过验证的元素有效,因为它主要在页面上。
第二个没有。
第三个有效,因为我在集中精力的同时按下了提交。
jQuery 验证插件正常运行:
通过 .validate()
方法在页面加载 表单上初始化 插件。 不要在click
处理程序中初始化表单(不要调用.validate()
方法)。
通过.rules()
方法向动态添加的表单字段添加规则。
您不能在第 1 步之前执行第 2 步。
您在 .rules()
之后调用 .validate()
,它在 click
处理程序中。 .validate()
方法是表单上插件的 初始化 ,并且只应在加载页面时调用 一次 。
在使用 .validate()
初始化表单之前,您永远不能调用 .rules()
方法。
因此,将 .validate()
完全从 click
处理程序中拉出,并且只在文档就绪处理程序中调用一次。
我已经阅读了关于 SO 的四个相关答案,它们构成了我在这里尝试的动态验证的主要部分。
我有一个表单,其中包含一些动态操作,例如添加和删除包含用户研究或经验的块 (div)。每个块都包含一些我需要验证的元素。
仅当您聚焦然后提交表单时,对附加元素的验证才有效,在此之前,如果您不聚焦元素,例如 "study_5" 并提交表单,它将被提交没问题(即使它有所需的标签)
这是我的 JS:
var multiple_formation_max_fields = 10;
var multiple_formation_wrapper = $(".multiple-formation");
var multiple_formation_add_button = $(".add_formation");
var x = {{ Auth::user()->candidate and Auth::user()->candidate->certifications->count() > 0 ? Auth::user()->candidate->certifications->count() + 1 : 1}};
$(multiple_formation_add_button).click(function (e) {
e.preventDefault();
if (x < multiple_formation_max_fields) {
x++;
$(multiple_formation_wrapper).append(
'<div class="sub-form">' +
// deleted unusfull code
'<div class="col-lg-6">' +
'<span class="pf-title">Établissement</span>' +
'<div class="pf-field">' +
'<input type="text" class="form-control" required id="formation_establishment_'+x+'" placeholder="ISET, Esprit, .. " name="formation_establishment[]">' +
// deleted unusfull code
'</div>' +
'</div>' +
'</div>'
);
}
$('.date').dateDropper();
$(".chosen").chosen();
$('#formation_establishment_'+x).rules('add', {
'required': true
});
$('#form').validate();
});
结果就像我点击提交一样,没有关注附加到表单的第二个元素:
第一个经过验证的元素有效,因为它主要在页面上。 第二个没有。 第三个有效,因为我在集中精力的同时按下了提交。
jQuery 验证插件正常运行:
通过
.validate()
方法在页面加载 表单上初始化 插件。 不要在click
处理程序中初始化表单(不要调用.validate()
方法)。通过
.rules()
方法向动态添加的表单字段添加规则。
您不能在第 1 步之前执行第 2 步。
您在 .rules()
之后调用 .validate()
,它在 click
处理程序中。 .validate()
方法是表单上插件的 初始化 ,并且只应在加载页面时调用 一次 。
在使用 .validate()
初始化表单之前,您永远不能调用 .rules()
方法。
因此,将 .validate()
完全从 click
处理程序中拉出,并且只在文档就绪处理程序中调用一次。