微信小程序表单验证(WxValidate使用)
参考博客:
https://www.cnblogs.com/zhangxiaoyong/p/10166951.html https://github.com/wux-weapp/wx-extend/blob/master/src/pages/validate/index.js#L1
1:
首先插件的下载地址和官方文档都在WxValidate下载地址和文档地址
具体的WxValidate.js文件的位置在wx-extend/src/assets/plugins/wx-validate/WxValidate.js
首先引入的方法就是将插件文件拷贝到你所需要的文件目录下
2:之后可以采用局部引用的方式将插件引入到你所需要的页面的JS文件里,具体操作如下
import WxValidate from "../../utils/WxValidate";
3:
之后就是注意在wxml文件中对表单组件的数据绑定,否则无论表单组件如何填写,都无法验证规则。
主要的方法就是在需要验证的input框内加入value值的绑定,
表单组件的绑定方法如下:
<!--pages/my/my.wxml-->
<view>
<view class="tip">
<text class="iconfont icon-approve"></text>
<text>身份认证将提高租房成功率!</text>
</view>
<form bindsubmit="formSubmit">
<view>
<label>昵称</label>
<input name="nickName" value="{{form.nickName}}" />
</view>
<view>
<label>手机</label>
<input name="phone" type="text" value="{{form.phone }}" />
</view>
<view>
<label>年龄</label>
<input name="age" type="number" value="{{form.age}}" />
</view>
<view>
</view>
<view>
<label>性别</label>
<radio-group name="sex" value="1">
<label class="radio">
<block wx:if="{{user.sex == '1'}}">
<radio value="1" checked="{{true}}" />
</block>
<block wx:else>
<radio value="0" />
</block>
男
</label>
<label class="radio">
<block wx:if="{{user.sex == '2'}}">
<radio value="2" checked="{{true}}" />
</block>
<block wx:else>
<radio value="女" />
</block>
女
</label>
</radio-group>
</view>
<view class="uppic">
<image src="" bindtap="upfile"/>
<image src="{{tempFilePaths}}"></image>
</view>
<view class="sendbtn">
提交信息
<button type="primary" form-type="submit">提交信息</button>
</view>
</form>
</view>
4:然后在js文件中加入form表单的绑定
Page({
data: {
form: {//增加form子元素
nickName:'',
phone:'',
age:'',
items: [
{ name: '1', value: '男', checked: 'true' },
{ name: '2', value: '女' }
],
date: '请选择出生年月',
casArray: ['身份证', '护照', '其他/港澳台居民身份证', '外国人永久居留身份证'],
},
},
5:onLoad函数中加入验证规则函数
onLoad() {
this.initValidate()//验证规则函数
},
6:验证规则和报错规则的代码
//报错
showModal(error) {
wx.showModal({
content: error.msg,
showCancel: false,
})
},
//验证函数
initValidate() {
const rules = {
nickName: {
required: true,
minlength:2
},
phone:{
required:true,
tel:true
},
age:{
required:true, },
sex:{
required:true,
} }
const messages = {
nickName: {
required: '请填写姓名',
minlength:'请输入正确的名称'
},
phone:{
required:'请填写手机号',
tel:'请填写正确的手机号'
},
age:{
required:'请填写年纪',
},
sex:{
required:'请填写性别',
}
}
this.WxValidate = new WxValidate(rules, messages)
},
//调用验证函数
formSubmit: function(e) {
console.log('form发生了submit事件,携带的数据为:', e.detail.value)
const params = e.detail.value
//校验表单
if (!this.WxValidate.checkForm(params)) {
const error = this.WxValidate.errorList[0]
this.showModal(error)
return false
}
this.showModal({
msg: '提交成功'
})
}
总体js页面:
// pages/my/my.js import WxValidate from "../../utils/WxValidate";
const app=getApp();
Page({
data: {
form: {//增加form子元素
nickName:'',
phone:'',
age:'',
items: [
{ name: '1', value: '男', checked: 'true' },
{ name: '2', value: '女' }
],
date: '请选择出生年月',
casArray: ['身份证', '护照', '其他/港澳台居民身份证', '外国人永久居留身份证'],
},
},
onLoad() {
this.initValidate()//验证规则函数
}, showModal(error) {
wx.showModal({
content: error.msg,
showCancel: false,
})
},
initValidate() {
const rules = {
nickName: {
required: true,
minlength:2
},
phone:{
required:true,
tel:true
},
age:{
required:true, },
sex:{
required:true,
} }
const messages = {
nickName: {
required: '请填写姓名',
minlength:'请输入正确的名称'
},
phone:{
required:'请填写手机号',
tel:'请填写正确的手机号'
},
age:{
required:'请填写年纪',
},
sex:{
required:'请填写性别',
}
}
this.WxValidate = new WxValidate(rules, messages)
},
//调用验证函数
formSubmit: function(e) {
console.log('form发生了submit事件,携带的数据为:', e.detail.value)
const params = e.detail.value
//校验表单
if (!this.WxValidate.checkForm(params)) {
const error = this.WxValidate.errorList[0]
this.showModal(error)
return false
}
this.showModal({
msg: '提交成功'
})
} })
参考页面:
import WxValidate from '../../assets/plugins/wx-validate/WxValidate' const App = getApp() Page({
data: {
form: {
gender: '',
assistance: '',
email: '',
tel: '',
idcard: '',
password: '',
confirmPassword: '',
countryIndex: '',
slider: '',
agree: '',
textarea: '',
},
radio: [{
name: '男',
value: 'male',
checked: !1,
},
{
name: '女',
value: 'female',
},
],
checkbox: [{
name: '黄药师',
value: '0001',
checked: !1,
},
{
name: '欧阳锋',
value: '0002',
},
{
name: '段智兴',
value: '0003',
},
{
name: '洪七公',
value: '0004',
},
],
countries: [
'中国',
'美国',
'英国',
],
component: App.components[2],
},
onLoad() {
this.initValidate()
console.log(this.WxValidate)
},
showModal(error) {
wx.showModal({
content: error.msg,
showCancel: false,
})
},
submitForm(e) {
const params = e.detail.value console.log(params) // 传入表单数据,调用验证方法
if (!this.WxValidate.checkForm(params)) {
const error = this.WxValidate.errorList[0]
this.showModal(error)
return false
} this.showModal({
msg: '提交成功',
})
},
initValidate() {
// 验证字段的规则
const rules = {
gender: {
required: true,
},
assistance: {
required: true,
assistance: true,
},
email: {
required: true,
email: true,
},
tel: {
required: true,
tel: true,
},
idcard: {
required: true,
idcard: true,
},
password: {
required: true,
minlength: 6,
maxlength: 15,
},
confirmPassword: {
required: true,
minlength: 6,
maxlength: 15,
equalTo: 'password',
},
countryIndex: {
required: true,
},
slider: {
required: true,
min: 40,
max: 80,
},
agree: {
required: true,
},
textarea: {
required: true,
contains: '自愿',
},
} // 验证字段的提示信息,若不传则调用默认的信息
const messages = {
gender: {
required: '请选择性别',
},
assistance: {
required: '请勾选1-2个敲码助手',
},
email: {
required: '请输入邮箱',
email: '请输入正确的邮箱',
},
tel: {
required: '请输入手机号',
tel: '请输入正确的手机号',
},
idcard: {
required: '请输入身份证号码',
idcard: '请输入正确的身份证号码',
},
password: {
required: '请输入新密码',
minlength: '密码长度不少于6位',
maxlength: '密码长度不多于15位',
},
confirmPassword: {
required: '请输入确认密码',
minlength: '密码长度不少于6位',
maxlength: '密码长度不多于15位',
equalTo: '确认密码和新密码保持一致',
},
countryIndex: {
required: '请选择国家/地区',
},
slider: {
required: '请选择年龄',
min: '年龄不小于18',
max: '年龄不大于60',
},
agree: {
required: '请同意我们的声明',
},
textarea: {
required: '请输入文本',
contains: '请输入文本(必须含有自愿两字)',
},
} // 创建实例对象
this.WxValidate = new WxValidate(rules, messages) // 自定义验证规则
this.WxValidate.addMethod('assistance', (value, param) => {
return this.WxValidate.optional(value) || (value.length >= 1 && value.length <= 2)
}, '请勾选1-2个敲码助手')
},
radioChange(e) {
const value = e.detail.value
const radio = this.data.radio
const items = radio.map(n => {
return Object.assign({}, n, {
checked: n.value === value,
})
})
console.log(items)
this.setData({
radio: items,
'form.gender': value,
})
},
checkboxChange(e) {
const values = e.detail.value
const checkbox = this.data.checkbox
const items = checkbox.map(n => {
return Object.assign({}, n, {
checked: values.includes(n.value),
})
})
console.log(items)
this.setData({
checkbox: items,
'form.assistance': values,
})
},
bindCountryChange(e) {
const value = e.detail.value
this.setData({
'form.countryIndex': value,
})
},
})
参考:
效果:
微信小程序表单验证(WxValidate使用)的更多相关文章
- 微信小程序表单校验WxValidate.js使用
WxValidate插件是参考 jQuery Validate 封装的,为小程序表单提供了一套常用的验证规则,包括手机号码.电子邮件验证等等,同时提供了添加自定义校验方法,让表单验证变得更简单. 首先 ...
- 微信小程序表单验证
参考:http://www.cnblogs.com/zhangxiaoyong/p/10166951.html
- 微信小程序表单弹窗实例
开发中有时候会碰到需要一个表单弹窗来处理数据的提交处理,然后这次发布的这套源码就是解决这个问题! <!--button--> <view class="btn" ...
- .NET CORE 微信小程序消息验证的坑
进入微信小程序,点击开发->选择消息推送->扫码授权,填写必要参数 进入接口开发: /// <summary> /// 验证小程序 /// </summary> / ...
- 微信小程序——单选项
对于小程序单选,官方文档已经贴出了代码,我这里也不做过多解释,只是分享给大家一个小功能 一般在单选或者多选时,都会出现“其他”这个选项,如果通过input焦点事件.失焦事件来控制,代码会很繁琐 这里可 ...
- 微信小程序——表单验证插件WxValidate的二次封装(终极版)
微信小程序表单验证前面的两篇文章做的效果总感觉都有点不太友好,第一篇里的效果是将错误信息通过对话框形式弹出来,这种形式在web形式下早已经淘汰了:第二篇是一次性全部显示所有的错误,然后3秒后自动消失, ...
- 微信小程序_(表单组件)button组件的使用
微信小程序表单组件button官方文档 传送门 Learn 一.button组件的使用 一.button组件的使用 size:按钮的大小[默认值default] type:按钮的样式类型[默认值def ...
- 微信小程序——获取formid
小程序对模板消息推送做了相应的限制:如果用户主动触发小程序表单提交1次,小程序可在7天内向用户主动推送1条模版消息,如果用户通过小程序完成支付,小程序可在7天内向用户主动推送3条模版消息.(formi ...
- 微信小程序添加外部地图服务数据
先上效果: 缘起 使用微信小程序做地图相关功能的时候,有个需求是需要接入自己发布的地图服务.查看微信小程序地图组件文档,发现它对地图相关的支持很少,只有一些基础功能,比如添加点.线.面.气泡和一些常规 ...
随机推荐
- linux下core 相关设置
1)core文件简介core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试.当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文件,默认生成位置 ...
- JS 将Table内容导出到Excel(样式设计)
转载请注明来源:https://www.cnblogs.com/hookjc/ function saveAsExcel(tableID){ var tb = new TableToExcel(tab ...
- js 保存并排序输入内容
转载请注明来源:https://www.cnblogs.com/hookjc/ /* Create By:jiangcheng_15 Create Date:2012-01-32 */ functio ...
- 循环retian
1.循环retian基本概念 循环retain的场景 比如A对象retain了B对象,B对象retain了A对象 循环retain的弊端 这样会导致A对象和B对象永远无法释放 循环retain的解决方 ...
- action标签中method={1}怎么理解
其实用到method={数字}的时候,相应的前面的action是要出现*通配符来搭配的.比如一个小例子:<action name="user_*" class="U ...
- STP的究极进化MSTP
MSTP多生成树协议 1.MSTP概述 2.MSTP相关配置命令 1.MSTP是一个公有生成树协议,在实际生产环境中得到了广泛的应用. PVST是思科私有的,它能让多实例,多VLAN可以进行负载均衡, ...
- 干工第一天,这个api超时优化把我干趴下了!
近日我司进行云服务商更换,恰逢由我负责新上线的三方调用 api 维护管理,在将服务由阿里云部署到腾讯云过程中,我们压测发现在腾讯云调用京东接口时 TP999 抖动十分剧烈,尽管业务层有重试操作但是超时 ...
- 我是如何破解你的WINDOWS密码的 ?(1)
我是如何破解你的WINDOWS密码的 ?(1) 密码可以看作我们主要,甚至某些情况下唯一可用于防范入侵的防线.就算入侵者无法在物理上接触到计算机,对于对外的Web应用,他们依然可以通过远程桌面协议或身 ...
- suse 12 编译部署Keepalived + nginx 为 kube-apiserver 提供高可用
文章目录 编译部署nginx 下载nginx源码包 编译nginx 配置nginx.conf 配置nginx为systemctl管理 分发nginx二进制文件和配置文件 启动kube-nginx服务 ...
- Vue 源码解读(1)—— 前言
当学习成为了习惯,知识也就变成了常识. 感谢各位的 点赞.收藏和评论. 新视频和文章会第一时间在微信公众号发送,欢迎关注:李永宁lyn 文章已收录到 github 仓库 liyongning/blog ...