首页>Program>source

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

当我在某处阅读jquery validate插件时,需要使用唯一的字段名称来验证它们.所以我要对每个字段进行唯一命名.首先,我希望如果我使用类添加规则,则validate插件将负责动态添加元素的验证.但事实证明并非如此。

因此,即使每个字段的名称都是唯一的,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;
});

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

example and code set up here

最新回答
  • 2021-1-11
    1 #

    使用此插件中的一种方法时,例如 .rules() ,并且定位多个元素(例如 class) ,还必须使用jQuery .each() 方法。

    $('.work_emp_name').each(function () {
        $(this).rules("add", {
            required: true
        });
    });
    

    您不能使用 .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
            });
        });
    });
    

    Working DEMO: http://jsfiddle.net/Yy2gB/10/


    However, you can make it more efficient by only targeting the one new field ,而不是 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;
    });
    

    Working DEMO: http://jsfiddle.net/Yy2gB/11/


    我上面的两个示例都是将规则添加到动态创建的字段中.仍然需要在dom准备就绪时为静态字段声明任何规则,如下所示...

    $("#work_form").validate({
        rules: {
            "work_emp_name[0]": {
                required: true
            }
        }
    });
    

  • 2021-1-11
    2 #

    返回第一个选定元素的验证规则,或者 添加指定的规则并返回第一个匹配元素的所有规则.需要验证父表单,即首先调用$(" 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
    

  • 2021-1-11
    3 #

    这是因为jQuery Validation仅验证当前第一次出现的数组.

    您可以检查我在插件上的提交,该提交在任何出现的命名数组上都可以正常工作。

  • javascript:从另一个页面获取Bootstrap的模式内容
  • 通过从Javascript中的特定日期减去X天数来查找日期