微信小程序表单验证插件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 变量类型转换常用函数与代码[比较全]
Dec 01 Javascript
各情景下元素宽高的获取实现代码
Sep 13 Javascript
javascript与cookie 的问题详解
Nov 11 Javascript
标题过长使用javascript按字节截取字符串
Apr 24 Javascript
分享一个插件实现水珠自动下落效果
Jun 01 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
Oct 10 Javascript
Javascript 实现简单计算器实例代码
Oct 23 Javascript
jquery uploadify如何取消已上传成功文件
Feb 08 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
Oct 31 Javascript
Vue.js devtool插件安装后无法使用的解决办法
Nov 27 Javascript
JavaScript的Proxy可以做哪些有意思的事儿
Jun 15 Javascript
React服务端渲染原理解析与实践
Mar 04 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
zf框架的Filter过滤器使用示例
2014/03/13 PHP
php定界符
2014/06/19 PHP
PHP中文乱码解决方案
2015/03/05 PHP
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
js实现a标签超链接提交form表单的方法
2015/06/24 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
使用contextMenu插件实现Bootstrap table弹出右键菜单
2017/02/20 Javascript
JavaScript算法教程之sku(库存量单位)详解
2017/06/29 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
2017/12/24 Javascript
JS监听滚动和id自动定位滚动
2018/12/18 Javascript
jquery.pager.js分页实现详解
2019/07/29 jQuery
Electron 调用命令行(cmd)
2019/09/23 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
深度剖析使用python抓取网页正文的源码
2014/06/11 Python
python实现高斯判别分析算法的例子
2019/12/09 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
详解Python yaml模块
2020/09/23 Python
大学社团活动策划书
2014/01/26 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
代办出身证明书
2014/10/21 职场文书
中班下学期个人总结
2015/02/12 职场文书
个人年终总结开头
2015/03/06 职场文书
婚庆主持词大全
2015/06/30 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
python中Matplotlib绘制直线的实例代码
2021/07/04 Python