使用 jquery.validate 插件对动态新增的表单进行校验

2020-05-13 15:02:38 +08:00
 fanne

目前提交表单的时候只会对第一行表单能生效,新增的表单无法校验

如何对动态生成的表单进行同步校验?

<script src="{% static 'js/jquery-2.1.1.js' %}"></script>
<script src="{% static 'js/bootstrap.js' %}"></script>
<script src="{% static 'js/jquery.validate.js' %}"></script>
<script src="{% static 'js/messages_zh.min.js' %}"></script>
<script type="text/javascript" src="{% static 'js/jquery.editable-select.min.js' %}"></script>
<form class="form-horizontal" id="jsStayForm" method="post">
    <table>
        <tr id="tradds">
            <td>
                <select class="form-control m-b" name="virtual_cpu" id="virtual_cpu" autocomplete="off">
                        {% for  cpu_i in cpu_list %}
                            <option value="{{ cpu_i }}">{{  cpu_i  }}</option>
                        {% endfor %}
                </select>
            </td>
            <td>
                <select class="form-control m-b" name="virtual_mem" id="virtual_mem" autocomplete="off">
                        {% for  mem_i in mem_list %}
                            <option value="{{ mem_i }}">{{  mem_i  }}</option>
                        {% endfor %}
                </select>
            </td>
    </table>
    <button class="btn btn-primary" type="button" id="addCenterIpGrpBtn" onclick="addCenterIpGrp(this)">新增一行</button>
    <button class="btn btn-primary btn-danger"  id="jsStayBtn">添加虚拟机</button>
</form>

<script type="text/javascript">

##此处是进行使用插件,对下拉菜单进行可输入扩展
$('#virtual_cpu').editableSelect({
	effects: 'slide'
});

$('#virtual_mem').editableSelect({
	effects: 'slide'
});


### 此处对需要动态添加输入表单进行扩展
var varCount =1;
function addCenterIpGrp(obj) {
    varCount++;
    console.log(varCount);
    html = '<tr id="tradds">\n' +
        '    <td>\n' +
        '        <select class="form-control" name="virtual_cpu" id="virtual_cpu' + varCount + '" autocomplete="off">\n' +
        '                {% for  cpu_i in cpu_list %}\n'+
            '                    <option value="{{ cpu_i }}">{{  cpu_i  }}</option>\n'+
            '                {% endfor %}\n' +
        '        </select>\n' +
        '    </td>\n' +
        '    <td>\n' +
        '        <select class="form-control m-b" name="virtual_mem" id="virtual_mem' + varCount + '" autocomplete="off">\n' +
        '                {% for  mem_i in mem_list %}\n'+
            '                    <option value="{{ mem_i }}">{{  mem_i  }}</option>\n'+
            '                {% endfor %}\n' +
        '        </select>\n' +
        '    </td>\n' +
        '</tr>';

    ### 动态新增表单
    var d1 = document.getElementById('tradds');
    d1.insertAdjacentHTML('afterend', html);

    $("#virtual_cpu" + varCount).editableSelect({
        effects: 'slide'
    });

    $("#virtual_mem" + varCount).editableSelect({
        effects: 'slide'
    });


   ### 在此处,对动态添加的表单使用 jquery.validate 校验
    $("#virtual_cpu" + varCount).rules("add", {
        required: true,
        digits: true,
        min: 1,
        max: 64,
        messages: {
            digits: "请输入正整数"
        }
    });
}


##对整体表单进行校验
$("#jsStayForm").validate({
    rules:{
        virtual_cpu:{
            required:true,
            digits:true,
            min:1,
            max:64,
        },
        virtual_mem:{
            required:true,
            digits:true,
            min: 1,
            max: 128,
        },
        
    submitHandler:function(form) {
        alert('ddd');

        $.ajax({
            .....
        });

    }
});

<script>

1909 次点击
所在节点    jQuery
1 条回复
vue666
2023-04-11 19:40:03 +08:00
v 友这个解决了吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671262

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX