jquery验证动态表单输入上的插件不起作用

Sac*_*tte 15 javascript forms jquery jquery-validate

我有一个表单,我有一些字段,然后如果需要用户可以添加更多相同类型的字段.我使用http://jqueryvalidation.org/ validate插件来验证字段.

当我在某处阅读时,jquery validate plugin需要在字段中使用唯一的名称来验证它们.所以我将每个字段唯一命名.首先,我希望如果我使用类添加规则,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;
});
Run Code Online (Sandbox Code Playgroud)

请在小提琴设置中找到标记.

示例和代码在此处设置

Spa*_*rky 35

当使用这个插件中的一个方法,比如.rules(),并且定位多个元素(如a)时class,您还必须使用jQuery .each()方法.

$('.work_emp_name').each(function () {
    $(this).rules("add", {
        required: true
    });
});
Run Code Online (Sandbox Code Playgroud)

并且您不能使用.rules()DOM中尚不存在的元素.只需将.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
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

工作演示: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;
});
Run Code Online (Sandbox Code Playgroud)

工作演示:http: //jsfiddle.net/Yy2gB/11/


我上面的两个例子都是为动态创建的字段添加规则.您仍然需要在dom准备好的情况下为静态字段声明任何规则,如下所示......

$("#work_form").validate({
    rules: {
        "work_emp_name[0]": {
            required: true
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 也许这是一个模糊的问题,但不是一个插件,像验证应该处理动态添加的字段或添加规则与类没有使用`$ .each`在第一位?现在我知道它的写得非常好而且有很多选择,但我的意思是这些是插件应该具有的基本功能. (3认同)
  • 只是为了节省时间(或者现在)我只是在模板中添加了`data-rule-required ="true"`.这也强制了动态元素的验证规则.而且我有8个字段,只需单击"添加雇主"按钮(指定,工作范围,开始和结束日期,约会信件等)即可重复.因此,如果我想在这些字段中添加规则,那么我必须在"添加雇主"点击监听器中编写相同的代码.太多了.相反,我选择了数据属性方法来添加验证规则. (2认同)