微信小程序表单验证插件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 相关文章推荐
身份证号码前六位所代表的省,市,区, 以及地区编码下载
Apr 12 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
Sep 15 Javascript
javascript类型系统——日期Date对象全面了解
Jul 13 Javascript
jquery利用json实现页面之间传值的实例解析
Dec 12 Javascript
JavaScript中动态向表格添加数据
Jan 24 Javascript
Webpack中css-loader和less-loader的使用教程
Apr 27 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
Sep 04 Javascript
原生JS实现前端本地文件上传
Sep 08 Javascript
vuedraggable+element ui实现页面控件拖拽排序效果
Jul 29 Javascript
angular 用Observable实现异步调用的方法
Dec 27 Javascript
JS实现扫码枪扫描二维码功能
Jan 03 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
Apr 08 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
Cakephp 执行主要流程
2010/03/24 PHP
PHP flush()与ob_flush()的区别详解
2013/06/03 PHP
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
webpack配置打包后图片路径出错的解决
2018/04/26 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
js实现扫雷源代码
2020/11/27 Javascript
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
python八大排序算法速度实例对比
2017/12/06 Python
Python中一些不为人知的基础技巧总结
2018/05/19 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
实例介绍Python中整型
2019/02/11 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
pytorch 查看cuda 版本方式
2020/06/23 Python
利用Node实现HTML5离线存储的方法
2020/10/16 HTML / CSS
如何利用cmp命令比较文件
2013/09/23 面试题
设计毕业生简历中的自我评价
2013/10/01 职场文书
自荐信结尾
2013/10/27 职场文书
教师队伍管理制度
2014/01/14 职场文书
业务员年终工作总结2015
2015/05/28 职场文书
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang