微信小程序表单验证(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 ...
- 微信小程序添加外部地图服务数据
先上效果: 缘起 使用微信小程序做地图相关功能的时候,有个需求是需要接入自己发布的地图服务.查看微信小程序地图组件文档,发现它对地图相关的支持很少,只有一些基础功能,比如添加点.线.面.气泡和一些常规 ...
随机推荐
- NFS(Network File System)即网络文件系统 (转)
第1章 NFS介绍 1.1 NFS服务内容的概述 □ RPC服务知识概念介绍说明,以及RPC服务存在价值(必须理解掌握) □ NFS服务工作原理讲解(必须理解掌握) □ NFS共享文件系统使用原理讲解 ...
- IDEA:修改JAVA文件自动引入import.*包
感谢大佬:https://blog.csdn.net/fly910905/article/details/90208744 问题描述 Intellij Idea工具在java文件中,经常会自动导入im ...
- Android SDK:Android standard develop kits 安卓开发的工具集
目前主流的安卓开发工具: 1.Adnroid-Adt-bundle SDK Manager.exe: Tools(安卓的开发小工具) 各种安卓版本 Extras 额外的开发包 在线更新/安装的安卓版本 ...
- 使用GDataXML生成、修改XML文档-陈棚
使用GDXML生成XML文档的步骤如下. 1.调用GDataXMLNode的elementWithName:方法创建GDataXMLElement对象,对象作为XML文档的根元素. 2.调用GData ...
- KubeSphere单节点(all-in-one)平台搭建记录
KubeSphere单节点(all-in-one)平台搭建记录 目录 KubeSphere单节点(all-in-one)平台搭建记录 一.主机准备 1.1 主机配置 1.2 环境准备 二.下载kube ...
- 鸟哥的Linux私房菜学习笔记——文件权限与目录配置
Linux的文件权限和目录配置 在linux中的每个用户必需属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念. (1)所有者 一般为文件的创建者,谁创建了该文件,就是天 ...
- Feign实现动态URL
需求描述 动态URL的需求场景: 有一个异步服务S,它为其他业务(业务A,业务B...)提供异步服务接口,在这些异步接口中执行完指定逻辑之后需要回调相应业务方的接口. 这在诸如风控审核,支付回调等场景 ...
- Redis 源码简洁剖析 11 - 主 IO 线程及 Redis 6.0 多 IO 线程
Redis 到底是不是单线程的程序? 多 IO 线程的初始化 IO 线程运行函数 IOThreadMain 如何推迟客户端「读」操作? 如何推迟客户端「写」操作? 如何把待「读」客户端分配给 IO 线 ...
- Solution -「CF 1023F」Mobile Phone Network
\(\mathcal{Description}\) Link. 有一个 \(n\) 个结点的图,并给定 \(m_1\) 条无向带权黑边,\(m_2\) 条无向无权白边.你需要为每条白边指定边权 ...
- 【软件实施面试】MySQL和Oracle联合查询以及聚合函数面试总结
软件实施面试系列文章第二弹,MySQL和Oracle联合查询以及聚合函数的面试总结.放眼望去全是MySQL,就不能来点Oracle吗?之前面过不少公司,也做过不少笔试题,现在已经很少做笔试题了.你肚子 ...