微信小程序表单验证插件WxValidate的二次封装功能(终极版)


Posted in Javascript onSeptember 03, 2019

微信小程序表单验证前面的两篇文章做的效果总感觉都有点不太友好,第一篇里的效果是将错误信息通过对话框形式弹出来,这种形式在web形式下早已经淘汰了;第二篇是一次性全部显示所有的错误,然后3秒后自动消失,

这种在极端情况下也不太好,例如我例子里的一页的表单个数非常多的情况下,可能后面的还没看到就消失了。所以最近又重新做了一版,最终版的效果如下图:错误信息一次性全部显示,可以通过点击信息框让其消失,将自动消失时间设置的稍微长点,例如10秒,这样就能比较好的兼顾效果和使用上的便捷。

微信小程序表单验证插件WxValidate的二次封装功能(终极版)

先讲讲最终版与前面2版的不同点

1.前面版本中提到,表单空间里需要添加3个参数:id,data-fieldname,data-validate 。最终版中只需要 data-validate 即可。

2.由于需要点击错误信息框后使其隐藏,则需要通过微信小程序wxs事件响应功能,新增事件

一、util.wxs文件

module.exports = {
 hiddenValidateError: hiddenValidateError
}
function hiddenValidateError(event, ownerInstance) {
 var index= event.target.dataset.index;
 var instance = ownerInstance.selectComponent('.validateText'+index) // 返回组件的实例
 instance.setStyle({
 "visibility": "hidden"
 }) 
}

二、wxml文件

<wxs module="wxs" src="../../utils/util.wxs"></wxs>
<block wx:for="{{arrValidate}}" wx:for-item="validateErrorText">
 <view class="validateText validateText{{validateErrorText.index}}" animation="{{vaildateErrorText_animation}}" style="visibility:{{validateErrorText.visibility}};top:{{validateErrorText.top}};left:{{validateErrorText.left}};" data-index="{{validateErrorText.index}}" bindtap="{{wxs.hiddenValidateError}}">
 {{validateErrorText.msg}}
 </view>
</block>
<form bindsubmit="formSubmit">
<view class="wide-info">
<view class="wide-info-list">
<!--姓名-->
<view class="info-list">
<view class="info-list-1eft">
<text class="notEmptyClass">姓名</text>
</view>
<view class="info-list-right">
<input name='tname' placeholder='请输入' value='{{form.tname}}' class="wxValidate inputName"
data-validate="notEmpty|size[4,10]"/>
</view>
</view>
......
</view>
<!--按钮--->
<view class="buttons-kind">
<button class="fabu" form-type="submit">发布</button>
</view>
</form>

三、form.js

onReady: function () {
 //验证方法
 this.WxValidate = new WxValidate();
},
formSubmit: function (e) {
 util.loadingMsg("数据提交中,请稍后...");
 var that = this;
 console.log('form发生了submit事件,携带的数据为:', e.detail.value)
 const params = e.detail.value 
 //校验表单
 if (!this.WxValidate.checkForm(params)) {
  var arrValidate = new Array();
  let top = 0;
  for (const i in this.WxValidate.errorList){
  const error = this.WxValidate.errorList[i]
  if(i==0){   
   top = error.top;
  }  
  const validateErrorText= {id:error.param, visibility: "inherit", top: error.top + "px", left: error.left + "px", msg: error.msg }  
  arrValidate[i]=validateErrorText;
  }
  this.setData({arrValidate: arrValidate});

)
  wx.pageScrollTo({
  scrollTop: top,
  duration:500
  });
  setTimeout(function(){    
  util.fadeOut(that, "vaildateErrorText_animation", 0);
  },10000);
  wx.hideLoading(); 
  return false
 } 
 wx.hideLoading();
 //向后台发送时数据 wx.request... 
 util.alert("成功提示", '提交成功 :' + e.detail.value.date);
 }

以上代码就是提交表单用到的关键代码,在实际使用是,最好将提交功能也做一个封装,这样以后就不用每次都写这么多代码了,关于提交功能的封装,等有空的时候在写了,表单验证插件终极版本在点击下方路径下载:

https://github.com/zhuiyue82/wx-wxValidate2.0

总结

以上所述是小编给大家介绍的微信小程序表单验证插件WxValidate的二次封装功能(终极版),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
情人节专属 纯js脚本1k大小的3D玫瑰效果
Feb 11 Javascript
jQuery实现移动端滑块拖动选择数字效果
Dec 24 Javascript
JavaScript实现输入框(密码框)出现提示语
Jan 12 Javascript
JS DOMReady事件的六种实现方法总结
Nov 23 Javascript
BootStrap树状图显示功能
Nov 24 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
Feb 23 Javascript
Vue.js开发环境快速搭建教程
Mar 17 Javascript
VUE多层路由嵌套实现代码
May 15 Javascript
基于layui的table插件进行复选框联动功能的实现方法
Sep 19 Javascript
Electron 调用命令行(cmd)
Sep 23 Javascript
Vue.js下拉菜单组件使用方法详解
Oct 19 Javascript
js实现时分秒倒计时
Dec 03 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
Sep 03 #Javascript
vue路由教程之静态路由
Sep 03 #Javascript
多个vue子路由文件自动化合并的方法
Sep 03 #Javascript
Emberjs 通过 axios 下载文件的方法
Sep 03 #Javascript
vue 自动化路由实现代码
Sep 03 #Javascript
vue中npm包全局安装和局部安装过程
Sep 03 #Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
Sep 03 #jQuery
You might like
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
2008/05/26 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
解析php mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
ThinkPHP中RBAC类的四种用法分析
2014/11/24 PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
简单实现php上传文件功能
2017/09/21 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
杨氏矩阵查找的JS代码
2013/03/21 Javascript
浅析javascript的return语句
2015/12/15 Javascript
React组件的三种写法总结
2017/01/12 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
Python Deque 模块使用详解
2014/07/04 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
python中单下划线_的常见用法总结
2018/07/10 Python
详解Python字符串切片
2019/05/20 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
pytest中文文档之编写断言
2019/09/12 Python
python multiprocessing多进程变量共享与加锁的实现
2019/10/02 Python
Python基本类型的连接组合和互相转换方式(13种)
2019/12/16 Python
python 数据类型强制转换的总结
2021/01/25 Python
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
俄罗斯一家时尚女装商店:Charuel
2019/12/04 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
军训学生自我鉴定
2014/02/12 职场文书
2015年学生管理工作总结
2015/05/26 职场文书
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
2021/06/09 Vue.js
Consul在linux环境的集群部署
2022/04/08 Servers