jquery在动态表单输入上验证插件不起作用
jquery validate plugin on dynamic form inputs not working
我有一个表单,其中有一些字段,如果需要,用户可以添加更多相同类型的字段。我正在使用http://jqueryvalidation.org/validate插件验证字段。
正如我在某个地方读到的,jquery验证插件需要字段的唯一名称来验证它们。所以我给每个字段命名都是唯一的。首先,我希望如果我使用类添加规则,validate插件将负责动态添加元素的验证。但事实证明并非如此。
所以,即使每个字段的名称是唯一的,验证插件也只验证最初呈现的第一个输入。
我甚至尝试使用$.clone(),希望它能处理所有事件绑定。但它对我不起作用。所以我改为下划线来重复标记,因为有很多字段,我不想用JS写模板并相应地命名。
我找不到解决这个问题的办法,只能呆在这里。在解决此问题之前,无法继续。
这是我写的JS。
$("#work_form").validate();
$(".work_emp_name").rules("add", {
required: true
});
_.templateSettings.variable = "element";
var tpl = _.template($("#form_tpl").html());
var counter = 1;
$("form").on("click", ".add_employer", function (e) {
e.preventDefault();
var tplData = {
i: counter
};
$("#word_exp_area").append(tpl(tplData));
counter += 1;
});
请在小提琴架上找到标记。
此处设置的示例和代码
当使用此插件中的一个方法(如.rules()
)并针对多个元素(如class
)时,还必须使用jQuery .each()
方法。
$('.work_emp_name').each(function () {
$(this).rules("add", {
required: true
});
});
并且不能对DOM中还不存在的元素使用.rules()
。只需将.rules()
方法移动到创建新输入的函数内部即可。
$("form").on("click", ".add_employer", function (e) {
e.preventDefault();
var tplData = {
i: counter
};
$("#word_exp_area").append(tpl(tplData));
counter += 1;
$('.work_emp_name').each(function () {
$(this).rules("add", {
required: true
});
});
});
工作演示:http://jsfiddle.net/Yy2gB/10/
但是,您可以通过仅针对一个新字段而不是使用work_emp_name
class
的所有字段来提高效率。
$("form").on("click", ".add_employer", function (e) {
e.preventDefault();
var tplData = {
i: counter
};
$("#word_exp_area").append(tpl(tplData)); // <- add new field
$('input[name="work_emp_name['+counter+']"]').rules("add", { // <- apply rule to new field
required: true
});
counter += 1;
});
工作演示:http://jsfiddle.net/Yy2gB/11/
我上面的两个例子都是为动态创建的字段添加规则。您仍然需要在dom就绪时为静态字段声明任何规则,如下所示。。。
$("#work_form").validate({
rules: {
"work_emp_name[0]": {
required: true
}
}
});
返回第一个选定元素或添加指定的规则并返回第一个匹配元素的所有规则。要求验证父窗体,即$("form").validate()首先调用或
删除指定的规则并返回第一个匹配元素的所有规则。更多信息
function addRule(id){
$("[name='work_emp_name["+id+"]']").rules("add", {
required: true
});
}
$("#work_form").validate();
addRule(0);
_.templateSettings.variable = "element";
var tpl = _.template($("#form_tpl").html());
var counter = 1;
$("form").on("click", ".add_employer", function (e) {
e.preventDefault();
var tplData = {
i: counter
};
$("#word_exp_area").append(tpl(tplData));
addRule(counter);
counter += 1;
}); here
这是因为jQuery Validation当前只验证数组的第一次出现。
你可以在插件上检查我的提交,它在任何出现命名数组的情况下都能正常工作。
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- jQuery验证插件submitHandler Ajax
- Jquery 验证插件 - 字段仍然产生错误
- 在使用 jQuery 验证插件进行验证后,使用 AJAX 提交表单
- 附加要使用的变量jQuery验证插件
- Jquery验证插件在与<发件人:form>标签
- jquery在动态表单输入上验证插件不起作用
- 表单验证消息(使用jQuery验证插件)
- jQuery验证插件-比较两个选择下拉列表的自定义方法
- jQuery验证插件,如果.is(“:已检查”),则需要该插件
- jQuery验证插件停止表单提交,提交按钮获胜'不起作用
- 如果选中了上一个复选框,则需要的验证插件
- jQuery表单验证插件's只有文字字段的问题
- Jquery验证插件两个按钮
- jquery验证插件-错误删除
- jQuery验证插件-表单不提交
- [contenteditable]元素和jQuery验证插件的问题
- 使用jquery验证插件检查数据库中是否存在电子邮件
- 如何从jQuery验证插件函数中删除AJAX
- 如何使用 Jquery 验证插件专门验证某个表单字段