微信小程序——表單驗證插件WxValidate的二次封裝(終極版)

    微信小程序表單驗證前面的兩篇文章作的效果總感受都有點不太友好,第一篇裏的效果是將錯誤信息經過對話框形式彈出來,這種形式在web形式下早已經淘汰了;第二篇是一次性所有顯示全部的錯誤,而後3秒後自動消失,git

這種在極端狀況下也不太好,例如我例子裏的一頁的表單個數很是多的狀況下,可能後面的還沒看到就消失了。因此最近又從新作了一版,最終版的效果以下圖:錯誤信息一次性所有顯示,能夠經過點擊信息框讓其消失,將自動消失時間設置的稍微長點,例如10秒,這樣就能比較好的兼顧效果和使用上的便捷。github

先講講最終版與前面2版的不一樣點web

1.前面版本中提到,表單控件裏須要添加3個參數:id,data-fieldname,data-validate 。最終版中只須要 data-validate 便可。小程序

2.因爲須要點擊錯誤信息框後使其隱藏,則須要經過微信小程序wxs事件響應功能,新增事件微信小程序

 

1、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"
  }) 
}

 

2、wxml文件ide

<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>

 

3、form.js ui

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);
  }

 

以上代碼就是表單驗證時用到的關鍵代碼,在實際使用時,最好將提交功能也作一個封裝,這樣就不用每次都寫這麼多代碼了,關於提交功能的封裝,等有空的時候再寫了,表單驗證插件最終版本經過點擊下方路徑可下載:this

https://github.com/zhuiyue82/wx-wxValidate2.0spa

相關文章
相關標籤/搜索