微信小程序表单验证插件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获取input的value问题说明
Aug 19 Javascript
基于jquery的给文章加入关键字链接
Oct 26 Javascript
javascript ready和load事件的区别示例介绍
Aug 30 Javascript
JavaScript的事件绑定(方便不支持js的时候)
Oct 01 Javascript
js仿小米手机上下滑动效果
Feb 05 Javascript
js实现模糊匹配功能
Feb 15 Javascript
深入理解node.js之path模块
May 03 Javascript
js实现前端图片上传即时预览功能
Aug 02 Javascript
javascript高级模块化require.js的具体使用方法
Oct 31 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
Jan 07 Javascript
解决Antd Table组件表头不对齐的问题
Oct 27 Javascript
javascript实现前端分页功能
Nov 26 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
SMARTY学习手记
2007/01/04 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
PHP实现自动识别Restful API的返回内容类型
2015/02/07 PHP
jQuery 选择器理解
2010/03/16 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
js判断图片加载完成后获取图片实际宽高的方法
2016/02/25 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
ExtJs整合Echarts的示例代码
2018/02/27 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
浅谈webpack4 图片处理汇总
2018/09/12 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
python3中str(字符串)的使用教程
2017/03/23 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
python3 读取Excel表格中的数据
2018/10/16 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
浅析python中的del用法
2020/09/02 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
为什么如下的代码int a=100,b=100;long int c=a * b;不能工作
2013/11/29 面试题
工业设计专业推荐信
2013/10/29 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
2015年度合同管理工作总结
2015/05/22 职场文书
珍爱生命主题班会
2015/08/13 职场文书
小学语文教师研修日志
2015/11/13 职场文书