Bootstrap 表单验证formValidation 之表单动态添加元素之后再次验证

   最近工作中要实现表单元素的动态增加,并使用bootstrap的formValidation 插件对动态添加的表单元素进行前台校验。在以前的工作中也使用过bootstrapformValidation 对表单元素进行校验,但涉及到的表单元素都是固定的,所以在页面载入时,对表单元素进行初始化就可以实现。但这次使用bootstrapformValidation 对表单元素的动态添加验证方式,在这个问题上还是浪费了很多时间,也查阅了网上不少资料,官方API,各种博主的文档,总结下,以供以后遇到此难题的朋友查阅。

1)formValidation官方API

2)弓长步又的博文北冥没有鱼的博文

3)在说一下我自己的项目:

后台使用的是python

先看一下后台返回的数据:

html = ''
for press in press_list:
    html += u'<input type="radio" name="test_name" value="test_value" title="test_title" >'
return html

前端写入数据:(样式使用的layui,JS使用的jquery

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test</title>
    <script src="static/js/jquery.form.js"></script>
</head>
<body>
    <form class="layui-form" id="form1"  onkeydown="if(event.keyCode==13)return false;">
        <div class="layui-form-item">
            <label class="layui-form-label">测试input标签</label>
                <div class="layui-input-block" >
                    <div id="test"></div>
                    <div class="layui-form-mid layui-word-aux ">
                    <i class="fa fa-bg fa-spinner fa-pulse" style="font-size: 20px;color: #1e9fff;display: none;"></i>
                    </div>
                </div>
        </div>
    </form>
</body>
<script>
    $.post(url,postdata,function (data) {
        var result = JSON.parse(data);
        if(result){
            $("#test").html(result.html);  // 接收后端返回数据
            // 下面是给动态添加的元素进行验证
            $('#form1').formValidation('addField', 'press',{
                                                            validators: {
                                                                notEmpty: {
                                                                    message: '未选择出版社'
                                                                }
                                                            }
                                                        });
        }
    });

    // 调用formValidation验证表单 ,对固定的html元素进行验证
    function init_validator() {
            $("#form1").formValidation({
                excluded: [],      // 只有禁用的表单不验证,取消隐藏不验证(tagsinput插件会隐藏原表单)
                row: {
                    selector: '.layui-input-block,.layui-input-inline '
                },
                fields: {
                    name: {
                        validators: {
                            notEmpty: {
                                message: '姓名不能为空'
                            },
                            regexp: {
                                message: '姓名必须为中文',
                                regexp: /^[\u4e00-\u9fa5]+$/
                            },
                            stringLength: {
                                message: '姓名不能超过6个字',
                                max: 6
                            }
                        },
                    },
                    phone: {
                        validators: {
                            notEmpty: {
                                message: '手机号不能为空'
                            },
                            regexp: {
                                message: '不是有效的手机号',
                                regexp: /^\d{11}$/
                            }
                        }
                    },
                    username: {
                        validators: {
                            notEmpty: {
                                message: '请先生成账号'
                            },
                            regexp: {
                                message: '不是有效账号',
                                regexp: /^\d{11}\w*$/
                            }
                        }
                    },
                    password: {
                        validators: {
                            notEmpty: {
                                message: '密码不能为空'
                            },
                            regexp: {
                                message: '密码必须是数字和字母组合,且至少8位',
                                regexp: /^(?=.*?[a-zA-Z])(?=.*?[0-9])[a-zA-Z0-9]{8,}$/
                            }
                        }
                    },
                    repassword: {
                        validators: {
                            notEmpty: {
                                message: '密码不能为空'
                            },
                            identical: {
                                field: 'password',
                                message: '两次输入密码不一致'
                            }
                        }
                    },
                    source: {
                        validators: {
                            notEmpty: {
                                message: '未选择招生来源'
                            }
                        }
                    },
                    project: {
                        validators: {
                            notEmpty: {
                                message: '未选择科目'
                            }
                        }
                    },
                    press: {
                        validators: {
                            notEmpty: {
                                message: '未选择出版社'
                            }
                        },
                        
                    },
                    book: {
                        validators: {
                            notEmpty: {
                                message: '未选择教材'
                            }
                        }
                    },
                    cls: {
                        validators: {
                            notEmpty: {
                                message: '未选择班级'
                            }
                        }
                    },
                    start_date: {
                        validators: {
                            notEmpty: {
                                message: '开始时间不能为空'
                            },
                            date: {
                                message: '不是有效日期(例:2017-01-01)',
                                format: 'YYYY-MM-DD'
                            }
                        }
                    },
                    end_date: {
                        validators: {
                            notEmpty: {
                                message: '结束时间不能为空'
                            },
                            date: {
                                message: '不是有效日期(例:2017-01-01)',
                                format: 'YYYY-MM-DD'
                            },
                            callback: {
                                callback: function (value, validator, $field) {
                                    var time_limit = $('input:radio[name="book"]:checked').data("time_limit");
                                        start_date = new Date($("#start_date").val()),
                                        end_date = new Date($("#end_date").val());
                                    if (time_limit && start_date) {

                                        start_date.setMonth(start_date.getMonth() + time_limit)
                                        if (end_date > start_date) {
                                            return {valid: false, message: "设置课程时间不能大于当前选择教材的课程时间" + time_limit + "个月"}
                                        } else {
                                            return true
                                        }


                                    }
                                    return true

                                }

                            }
                        }
                    },
                    lesson_num: {
                        validators: {
                            notEmpty: {
                                message: '总课时数不能为空'
                            },
                            regexp: {
                                message: '请输入有效课时数',
                                regexp: /^\d{1,3}$/
                            }
                        }
                    },

                }
            }).on('err.validator.fv', function (e, data) {
                // $(e.target)    --> The field element
                // data.fv        --> The FormValidation instance
                // data.field     --> The field name
                // data.element   --> The field element
                // data.validator --> The current validator name

                data.element
                    .data('fv.messages')
                    // Hide all the messages
                    .find('.help-block[data-fv-for="' + data.field + '"]').hide()
                // Show only message associated with current validator
                    .filter('[data-fv-validator="' + data.validator + '"]').show();
            });
        }

</script>

</html>

总结:

addField(field,options)

addField方法的参数

field就是要动态添加校验规则表单元素的name,即例子中的 pushMenu['+(n-1)+'].text

options实际就是校验规则   即例子中的{
                validators: {
                    notEmpty: {
                        message: '推送业务内容不能为空'
                    }
                }




猜你喜欢

转载自blog.csdn.net/weixin_40475396/article/details/79879094
今日推荐