jquery - 验证动态添加的字段

标签 jquery validation

单击添加按钮时,会动态添加新输入。但是,当提交表单时,仅验证第一个输入字段。如何验证动态添加的输入?

下面是我的代码:

<body>
    <section class="container">
        <div class="majors">
            <h1>Department</h1>
        </div>
        <form class="hform" id="selectForm" action="/action_page.php">
            <select name="Department">
                <option value="Sociology" selected>Sociology</option>
                <option value="Science">Science</option>
                <option value="Humanities">Humanities</option>
                <option value="Linguistics">Linguistics</option>
            </select>

            <div class="sbutton">
                <input type="button" id="submit_form" value="submit" />
            </div>
            <button class="delete" type="button" value="delete">Delete</button>
        </form>
    </section>

    <section class="container">
        <form class="cmxform" id="commentForm" method="get" action="form-handler.html" autocomplete="">
            <fieldset>
                <div class="form-copy-wrap">
                    <input class="checkbox" type="checkbox" />
                    <p>
                        <label for="aname">Name</label>
                        <input name="name[]" minlength="5" type="text" required/>
                    </p>
                    <p>
                        <label for="aemail">Email</label>
                        <input name="email[]" type="email" required/>
                    </p>
                    <p>
                        <label for="aage">Age</label>
                        <input name="age[]" type="number" required/>
                    </p>
                </div>
                <div class="input_fields_wrap">
                    <div class="addButton">
                        <button type="button" value="add">Add</button>
                    </div>
                </div>
            </fieldset>
        </form>
    </section>
    <script>
        $("#submit_form").on('click', function (e) {
            e.preventDefault();
            $("form#commentForm").submit();
            $(".form-copy-wrap").submit();
        });
        $("form#commentForm").validate({
            rules: {
                name: "required",
                email: {
                    required: true,
                    email: true,
                }
            },
            messages: {
                name: "Please specify your name",
                email: {
                    required: "We need your email address to contact you",
                    email: "Your email address must be in the format of <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5e303f333b1e3a31333f3730703d3133" rel="noreferrer noopener nofollow">[email protected]</a>"

                }
            }
        });
    </script>

    <script>
        $(document).ready(function () {
            var max_fields = 10;
            var counter = 0;

            $('.addButton').on('click', function () {
                counter++;
                if (counter >= max_fields) {
                    console.log('You have reached a max limit fields')
                    return;
                }
                var copy = $('.form-copy-wrap').first().clone();

                $("#commentForm fieldset").append(copy);
            });

            $('.delete').on('click', function () {
                $('input:checkbox').each(function () {
                    if ($(this).is(':checked')) {
                        $(this).closest('.form-copy-wrap').remove();

                    }
                });
            });
        });
    </script>
</body>

最佳答案

请将点击事件替换为此事件

 $('.addButton').on('click', function () {
    counter++;
    if (counter >= max_fields) {
       console.log('You have reached a max limit fields')
       return;
    }
    var copy = $('.form-copy-wrap').first().clone();

    $("#commentForm fieldset").append(copy);

    var form = $("#commentForm");
    form.removeData('validator');
    form.removeData('unobtrusiveValidation');
    $.validator.unobtrusive.parse(document);
});

关于jquery - 验证动态添加的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45030892/

相关文章:

spring - hibernate JavassistLazyInitializer : problems with validation

javascript - 如何并排显示两个div,左侧div固定位置,右侧div垂直滚动

javascript - 处理动态表单客户端的最佳方法?

javascript - 单击按钮时填写必填字段

api - 如何为 Kubernetes 准入 Controller 编写响应

javascript/jquery 输入验证

jQuery 验证 - 如何忽略字母大小写?

javascript - 即 10 : SCRIPT5: Access is Denied error on anchor click event

jquery - 具有相同类名的 div 仅有一个 jQuery 单击事件

python - Pylons - 处理 GET 和 POST 请求