Form表单组件,结合Cell、Checkbox-group、Checkbox组件等做表单校验。

在平远等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供做网站、成都网站设计 网站设计制作按需网站建设,公司网站建设,企业网站建设,品牌网站设计,营销型网站,成都外贸网站建设公司,平远网站建设费用合理。
{
  "component": true,
  "usingComponents": {
    "mp-toptips": "../components/toptips/toptips",
    "mp-cells": "../components/cells/cells",
    "mp-cell": "../components/cell/cell",
    "mp-checkbox": "../components/checkbox/checkbox",
    "mp-checkbox-group": "../components/checkbox-group/checkbox-group",
    "mp-form": "../components/form/form"
  }
}
 
    
        Form 
        表单输入 
     
    
        
            
                
                     
                 
             
            
                
                     
                 
             
            
                
                    
                 
                
                    
                    获取验证码 
                 
                
                    
                        {{date}} 
                     
                 
                
                    
                     
                 
             
            
                
                    
                 
             
         
        开关 
        
            
                标题文字 
                
                     
                 
             
         
        文本框 
        
            
                
                    
                 
             
         
        文本域 
        
            
                
                    
                    0/200 
                 
             
         
        选择 
        
            
                
                    
                        {{countryCodes[countryCodeIndex]}} 
                     
                 
                
                    
                 
             
         
        选择 
        
            
                
                    
                        {{accounts[accountIndex]}} 
                     
                 
             
            
                
                    国家/地区 
                 
                
                    
                        {{countries[countryIndex]}} 
                     
                 
             
         
        
            
         
        
            
         
     
 
Component({
    data: {
        showTopTips: false,
        radioItems: [
            {name: 'cell standard', value: '0', checked: true},
            {name: 'cell standard', value: '1'}
        ],
        checkboxItems: [
            {name: 'standard is dealt for u.', value: '0', checked: true},
            {name: 'standard is dealicient for u.', value: '1'}
        ],
        items: [
            {name: 'USA', value: '美国'},
            {name: 'CHN', value: '中国', checked: 'true'},
            {name: 'BRA', value: '巴西'},
            {name: 'JPN', value: '日本'},
            {name: 'ENG', value: '英国'},
            {name: 'TUR', value: '法国'},
        ],
        date: "2016-09-01",
        time: "12:01",
        countryCodes: ["+86", "+80", "+84", "+87"],
        countryCodeIndex: 0,
        countries: ["中国", "美国", "英国"],
        countryIndex: 0,
        accounts: ["微信号", "QQ", "Email"],
        accountIndex: 0,
        isAgree: false,
        formData: {
        },
        rules: [{
            name: 'radio',
            rules: {required: true, message: '单选列表是必选项'},
        }, {
            name: 'checkbox',
            rules: {required: true, message: '多选列表是必选项'},
        }, {
            name: 'qq',
            rules: {required: true, message: 'qq必填'},
        }, {
            name: 'mobile',
            rules: [{required: true, message: 'mobile必填'}, {mobile: true, message: 'mobile格式不对'}],
        }, {
            name: 'vcode',
            rules: {required: true, message: '验证码必填'},
        }, {
            name: 'idcard',
            rules: {required: true, message: 'idcard必填'},
        }]
    },
    methods: {
        radioChange: function (e) {
            console.log('radio发生change事件,携带value值为:', e.detail.value);
    
            var radioItems = this.data.radioItems;
            for (var i = 0, len = radioItems.length; i < len; ++i) {
                radioItems[i].checked = radioItems[i].value == e.detail.value;
            }
    
            this.setData({
                radioItems: radioItems,
                [`formData.radio`]: e.detail.value
            });
        },
        checkboxChange: function (e) {
            console.log('checkbox发生change事件,携带value值为:', e.detail.value);
    
            var checkboxItems = this.data.checkboxItems, values = e.detail.value;
            for (var i = 0, lenI = checkboxItems.length; i < lenI; ++i) {
                checkboxItems[i].checked = false;
    
                for (var j = 0, lenJ = values.length; j < lenJ; ++j) {
                    if(checkboxItems[i].value == values[j]){
                        checkboxItems[i].checked = true;
                        break;
                    }
                }
            }
    
            this.setData({
                checkboxItems: checkboxItems,
                [`formData.checkbox`]: e.detail.value
            });
        },
        bindDateChange: function (e) {
            this.setData({
                date: e.detail.value,
                [`formData.date`]: e.detail.value
            })
        },
        formInputChange(e) {
            const {field} = e.currentTarget.dataset
            this.setData({
                [`formData.${field}`]: e.detail.value
            })
        },
        bindTimeChange: function (e) {
            this.setData({
                time: e.detail.value
            })
        },
        bindCountryCodeChange: function(e){
            console.log('picker country code 发生选择改变,携带值为', e.detail.value);
    
            this.setData({
                countryCodeIndex: e.detail.value
            })
        },
        bindCountryChange: function(e) {
            console.log('picker country 发生选择改变,携带值为', e.detail.value);
    
            this.setData({
                countryIndex: e.detail.value
            })
        },
        bindAccountChange: function(e) {
            console.log('picker account 发生选择改变,携带值为', e.detail.value);
    
            this.setData({
                accountIndex: e.detail.value
            })
        },
        bindAgreeChange: function (e) {
            this.setData({
                isAgree: !!e.detail.value.length
            });
        },
        submitForm() {
            this.selectComponent('#form').validate((valid, errors) => {
                console.log('valid', valid, errors)
                if (!valid) {
                    const firstError = Object.keys(errors)
                    if (firstError.length) {
                        this.setData({
                            error: errors[firstError[0]].message
                        })
    
                    }
                } else {
                    wx.showToast({
                        title: '校验通过'
                    })
                }
            })
        }
    }
});
| 属性 | 类型 | 默认值 | 必填 | 说明 | 
|---|---|---|---|---|
| ext-class | string | 否 | 添加在组件内部结构的class,可用于修改组件内部的样式 | |
| rules | object | 
否 | 表单校验的规则列表,格式下面详细介绍 | |
| models | object | 否 | 需要校验的表单的数据 | |
| bindsuccess | eventhandler | 否 | 校验成功触发的事件,detail是{trigger},trigger的值是change或validate,表示是输入改成触发的校验还是主动调用的validate接口 | |
| bindfail | eventhandler | 否 | 校验失败触发的事件,detail是{trigger, errors},trigger的值是change或validate,表示是输入改成触发的校验还是主动调用的validate接口。errors是错误的字段列表。 | 
rules是表单校验的规则列表,列表每一项表示一个字段的校验规则,注意,必须要在Cell或Checkbox-group组件声明prop属性,表单校验规则才生效,表单校验规则的定义如下:
| 属性 | 类型 | 默认值 | 必填 | 说明 | 
|---|---|---|---|---|
| name | string | 是 | 校验的字段名 | |
| rules | array/object | 是 | 校验的规则,如果有多项,则是数组 | |
| rules.message | string | 否 | 校验失败时候提示的文字 | |
| rules.validator | function | 否 | 自定义校验函数,接受rule, value, param, models四个参数,其中rule格式为{name: '字段名', message: '失败信息'}, value是字段值,param是校验参数,models是form组件的models属性。函数返回错误提示,表示校验失败,错误提示会通过回调返回给开发者 | |
| rules.[rule] | string | 否 | rule是变量,表示内置的校验规则名称,比如required,则校验规则对象为{name: "fieldName", rules: {required: true}},下面会详细介绍所有的内置规则 | 
| 规则名 | 参数 | 说明 | 
|---|---|---|
| required | 是否必填 | |
| minlength | number | 最小长度 | 
| maxlength | number | 最大长度 | 
| rangelength | [number, number] | 长度范围,参数为[最小长度, 最大长度] | 
| bytelength | number | 字节长度 | 
| range | [number, number] | 数字的大小范围 | 
| min | number | 最小值限制 | 
| max | number | 最大值限制 | 
| mobile | 手机号码校验 | |
| 电子邮件校验 | ||
| url | URL链接地址校验 | |
| equalTo | string | 相等校验,参数是另外一个字段名 | 
validate接口接受类型为function的callback,callback有isValid和errors两个参数,isValid表示是否校验通过,errors在校验失败的时候的值为失败的字段列表。
validateField接口接受2个参数, 第一个是字段名,第二个是类型为function的callback,callback有isValid和errors两个参数,isValid表示是否校验通过,errors在校验失败的时候的值为失败的字段列表。
| 名称 | 描述 | 
|---|---|
| 默认 | 内容slot |