[微信小程序] 校验表单,滑动到不合格的具体表单项

[微信小程序] 校验表单,滑动到不合格的具体表单项

一、具体需求

产品提出校验表单时,填写不符合校验规则的,表单项 label 高亮,页面滑动定位到该表单项

二、实现思路

在校验表单函数,除了wx.showToast()提示用户外,使用wx.pageScrollTo 将页面滚动到目标位置,该API支持选择器和滚动距离两种方式定位,官方文档点我

首先要在 input-field 给具体的 id,这个id 根据表单项的具体位置决定,这里写的是比如这里是上线时间 published_at未选,则滑动到这个位置

<view id="published_at">
  <input-field
    type="text"
    value="{{form.miniprogram_app_id}}"
    disabled="{{isExpired}}"
    label="AppID"
    bindinput="onInputChange"
    bindfocus="setTipsModelhidden"
    bindblur="onAppIdInputBlur"
    data-input-type="miniprogram_app_id"
    placeholder="请填写小程序AppID"
    label-class="{{error === 'miniprogram_app_id' ? 'error' : ''}}"
    showHelp="{{true}}"
    bindclickHelp="onClickHelp"
    input-class="appId-input-class"
  />
</view>

然后再根据错误信息改变label 的样式 ,将label 变红

 label-class="{{error === 'miniprogram_app_id' ? 'error' : ''}}"
wx.pageScrollTo({
  selector: `#baseInfo>>>#${err.message}`,
  duration: 500,
})

附上表单校验函数

validateForm() {
 const {form} = this.data
 const requiredFields = [
   'miniprogram_name',
   'miniprogram_logo',
   'miniprogram_app_id',
   'published_at',
   'cover_image',
   'intro',
   'miniprogram_image',
 ]
 try {
   requiredFields.forEach(item => {
     if (typeof form[item] === 'string') {
       if (form[item] === '' || (item === 'miniprogram_app_id' && !isAppID(form[item]))) {
         throw new Error(item)
       }
     } else if (form[item].length <= 0) {
       throw new Error(item)
     }
   })
   return true
 } catch (err) {
   wxUtils.showToast(FROM_VALIDATE_ERROR_TEXT_MAP[err.message])
   this.setData({error: err.message})
   if (err.message === 'miniprogram_name') {
     wx.pageScrollTo({
       scrollTop: 0,
       duration: 500,
     })
   } else {
     wx.pageScrollTo({
       selector: `#baseInfo>>>#${err.message}`,
       duration: 500,
     })
   }
   return false
 }
},
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值