微信小程序表单验证插件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 相关文章推荐
jquery 页眉单行信息滚动显示实现思路及代码
Jun 26 Javascript
javascript模拟命名空间
Apr 17 Javascript
jQuery简单入门示例之用户校验demo示例
Jul 09 Javascript
ie下js不执行的几种可能
Feb 28 Javascript
vue实现简单的MVVM框架
Aug 05 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
Jan 08 Javascript
js逆向解密之网络爬虫
May 30 Javascript
Vue 子组件与数据传递问题及注意事项
Jul 11 Javascript
详解Vuex下Store的模块化拆分实践
Jul 31 Javascript
leaflet加载geojson叠加显示功能代码
Feb 21 Javascript
vue中v-for循环选中点击的元素并对该元素添加样式操作
Jul 17 Javascript
Vue 实例中使用$refs的注意事项
Jan 29 Vue.js
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函数memory_get_usage获取PHP内存清耗量的方法
2011/12/06 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
PHP实现XML与数据格式进行转换类实例
2015/07/29 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
2016/12/29 PHP
设置下载不需要倒计时cookie(倒计时代码)
2008/11/19 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
2015/10/09 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
jquery checkbox的相关操作总结
2016/10/17 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
vue父子组件的嵌套的示例代码
2017/09/08 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
浅谈webpack-dev-server的配置和使用
2018/05/17 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
vue 判断元素内容是否超过宽度的方式
2020/07/29 Javascript
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
在Python中使用swapCase()方法转换大小写的教程
2015/05/20 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
python进行文件对比的方法
2018/12/24 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
Original Penguin美国官网:布拉德皮特、强尼德普喜爱的服装品牌
2016/10/25 全球购物
医学护理系毕业生求职信
2013/10/01 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
公司仓管员岗位职责
2015/04/01 职场文书
2015年体检中心工作总结
2015/05/27 职场文书
施工现场安全管理制度
2015/08/05 职场文书
队名及霸气口号大全
2015/12/25 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书