微信小程序——表单验证插件WxValidate的二次封装(二)
在上一篇博客《微信小程序——仿jqueryValidate表单验证插件WxValidate的二次封装》中,我将WxValidate做了再次封装,简化了初始规则数据的构造,但是当有错误时页面上的表现还是通过弹出框的形式,且只能弹出第一个错误,这种做法总体感觉还是不太友好的,没有看过效果的同学可以先看上一篇文章。
今天抽空把错误呈现的方式重新修改了下,按照惯例,先看最终效果

通过上面的效果可以看到,当页面表单验证有错误时,将显示所有的错误,且自动定位到相应的表单处,由于考虑到手机屏幕一般都不大,所以最后会自动隐藏。这里我为了使最终的图片比较小,设置的隐藏动画的时间只有3秒,实际使用时,可以设置的稍微长点。
目前这种效果在使用时,也还是有一定的不足,例如我展示的这样,页面需要填写的东西非常多,报的错误也非常多,那么因为是同时消失,所以会导致使用者看不全所有的错误,但是由于微信小程序在动态修改页面样式、动态添加控件方面实在太坑爹,如果要完全做到跟WEB一样,最后会导致开发和使用过程中非常复杂,我个人觉得没有这个必要,毕竟在小程序里,这种页面不可能太多,太多了用小程序也不合适。
一、修改wxml文件
在页面上新增错误显示的容器元素,直接使用下面的,不用修改。
- <block wx:for="{{arrValidate}}" wx:for-item="validateErrorText">
- <view class="validateText" animation="{{vaildateErrorText_animation}}" style="visibility:{{validateErrorText.visibility}};top:{{validateErrorText.top}};left:{{validateErrorText.left}};">
- {{validateErrorText.msg}}
- </view>
- </block>
二、修改app.wxss文件
新增错误显示容器的样式。
- .validateText{
- visibility:hidden;
- position: absolute;
- color: red;
- border: 1px solid #dfdfdf;
- width: 400rpx;
- min-height: 25px;
- box-shadow: 2px 2px 2px #888888;
- border-radius:5px;
- display: flex;
- align-items:flex-start;
- justify-content:flex-end;
- padding: 5px;
- background-color: #ffffff;
- opacity:0.87;
- z-index: 999;
- }
- .validateText:before{
- content: '* ';
- }
三、修改WxValidate.js
- query.selectAll(".wxValidate").fields({
- id: true,
- size:true,
- dataset: true,
- rect:true,
- properties: ['validate', 'fieldname'],
- context: true
- }, function(res) {
- res.dataset
- res.context
- }).exec(function(res) {
- const arr = res[0];
- //console.log(arr)
- for (const i in arr) {
- var id = arr[i].id
- var fieldname = arr[i].dataset.fieldname;
- var validate = util.trim(arr[i].dataset.validate);
- rules[id] = util.defaultIfEmpty(rules[id], {});
- messages[id] = util.defaultIfEmpty(messages[id], {})
- messages[id].top = arr[i].top;
- messages[id].left = arr[i].left;
- messages[id].width = arr[i].width;
- that.__getFormatValidate(rules[id], messages[id], id, fieldname, validate);
- }
- });
主要是多了messages[id].top = arr[i].top; messages[id].left = arr[i].left; messages[id].width = arr[i].width;
用于获取当前表单的位置和宽度,用于错误显示框的定位。
四、修改提交表单事件
- formSubmit: function (e) {
- util.loadingMsg("数据提交中,请稍后...");
- var that = this;
- console.log('form发生了submit事件,携带的数据为:', e.detail.value)
- const params = e.detail.value;
- console.log(params)
- console.log(this.WxValidate.rules)
- console.log(this.WxValidate.messages)
- //校验表单
- 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});
- // const error = this.WxValidate.errorList[0]
- // //util.alert("错误提示",error.msg+error.left+" ** "+error.top)
- // that.setData({
- // validateErrorText: { visibility:"inherit",top:error.top+"px",left:error.left+"px",msg:error.msg}
- // })
- wx.pageScrollTo({
- scrollTop: top,
- duration:500
- });
- setTimeout(function(){
- console.log("***timeout")
- util.fadeOut(that, "vaildateErrorText_animation", 0);
- },5000);
- wx.hideLoading();
- return false
- } wx.hideLoading();
- //向后台发送时数据 wx.request...
- util.alert("成功提示", '提交成功 :' + e.detail.value.date);
- }
这里主要是将所有的错误循环出来并显示。
五、修改util.js
新增一个淡入淡出的动画函数:
- function fadeOut(that, animationId, opacity, data) {
- var animation = wx.createAnimation({
- duration: 3000,
- timingFunction: 'ease',
- });
- animation.opacity(opacity).step();
- var json = {};
- json[animationId] = animation.export();
- if(isNotEmpty(data)){
- Object.assign(json,data)
- }
- //设置动画
- that.setData(json);
- }
在CSDN的本文链接:https://blog.csdn.net/zhuiyue82/article/details/100040614
微信小程序——表单验证插件WxValidate的二次封装(二)的更多相关文章
- 微信小程序——表单验证插件WxValidate的二次封装(终极版)
微信小程序表单验证前面的两篇文章做的效果总感觉都有点不太友好,第一篇里的效果是将错误信息通过对话框形式弹出来,这种形式在web形式下早已经淘汰了:第二篇是一次性全部显示所有的错误,然后3秒后自动消失, ...
- 微信小程序 - 表单验证插件WxValidate使用
插件下载地址及官方文档:https://github.com/skyvow/wx-extend 具体的WxValidate.js文件的位置在wx-extend/src/assets/plugins/w ...
- 微信小程序 - 表单验证插件WxValidate(自定义警告信息形式)
弹出的形式对于用户来说,总是不太友好的 可能会出现层级问题(只需要设置一下提示的层级即可) WxValidate内置规则 以下代码拷贝即可使用~ wxml <form bindsubmit='s ...
- 微信小程序——仿jqueryValidate表单验证插件WxValidate的二次封装(一)
在做web开发时,表单验证插件我们前端用的是jqueryValidate,由于个人主要精力是在后台JAVA开发上,为了让插件与后台更好的结合和使用,通过JAVA的自定义组件将表单全部重新写了一边,同时 ...
- 微信小程序-表单
wxml <view> 按钮: <button size="{{buttom.size}}" type="{{buttom.type}}" p ...
- 微信小程序-表单组件
button 按钮 注:button-hover 默认为{background-color: rgba(0, 0, 0, 0.1); opacity: 0.7;} 示例代码: /** wxss **/ ...
- 微信小程序-表单笔记
发布页——向云端数据库上传多行文字和4张图片 第6,8行注释掉和不注释掉都可以实现数据上传 var _this = this; wx.cloud.callFunction({ name: 'searc ...
- 微信小程序 --- 表单输入验证(手机号、邮箱验证、输入非空)
js代码 Page({ /** * 页面的初始数据 */ data: { indicatorDots: false, ...
- 微信小程序-表单笔记2
本地添加4张图片并显示至页面——组件位置.设置样式.列表渲染 Q.button是一张图片,需要实现点击这张图片后选择本地图片后显示至页面,不知道怎么让本地图片将button挤到右边 S.在wxml中 ...
随机推荐
- 二、计算机数据表示&&校验码(简单了解)
一.数据表示 机器数:各种数值在计算机中的表示形式.其特点是采用二进制计数器,数的符号用0和1标识,小数点则隐含,表示不占位置.机器数分为带符号数和无符号数.无符号数称为正数. 比如,十进制中的数 + ...
- Linux-进程的观察
16.1.1 进程与程序 ·程序 (program):通常为 binary program ,放置在储存媒体中 (如硬盘.光盘.软盘.磁带等), 为实体文 件的型态存在: ·进程 (process): ...
- 2019icpc银川站 复现赛
打了计蒜客上的银川重现赛,总体感觉难度上确实比平时区域赛要低上一些. 这里补一下F题和G题的思路和代码. upd:I题也补了,理解差不多都在注释里. F题 做法,玩一下n=10的样例就出 ...
- 带你揭秘Shiro(一)
提到Shiro,不得不先介绍RBAC介绍 RBAC介绍: RBAC是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的 ...
- Azure 上的高可用概念
更多内容,添加公众号关注: 场景一: 某智能家居厂家,用户喊出“小X同学,帮我扫地”后,服务器宕机了,扫地机器人不能立即启动,于是,用户可能再连续喊几次后,无奈又习惯的按下了扫地机器人的启动按钮. 场 ...
- 几种设计良好结构以提高.NET应用性能的方法
写在前面 设计良好的系统,除了架构层面的优良设计外,剩下的大部分就在于如何设计良好的代码,.NET提供了很多的类型,这些类型非常灵活,也非常好用,比如List,Dictionary.HashSet.S ...
- 邬江兴院士:工业互联网安全&拟态防御
尊敬的郑院士.曹书记.张秘书长,各位学术界的同仁们,很高兴在第一届工业互联网学术专题论坛上发言.我今天想谈的问题是工业互联网,这个概念很热,前景也很美好,很诱人.但是我认为工业互联网的安全挑战更严峻, ...
- TSC打印机防重码在线检测系统
条码标签作为产品的一个身份标识,被应用得越来越普及,但随着使用量的增大,在打印条码流水号的过程中,偶尔会出现打印重复号码的标签出现,这样对产品生产及管理过程中会产生极大的混乱,会收到严重的客诉及返工, ...
- leaflet 结合 Echarts4 实现统计图(附源码下载)
前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...
- 如何在idea中加载本地中已有的python
本地上安装好了python, 在IDEA中new Project的时候,new Python,选择SDK选择本地的python(本地的python已经配置好了环境变量才行) 另外,默认是不会导入Pyt ...