Skip to the content.

时间来到4月,4个月没更了,鬼晓得自己在干嘛🙈

今天(额,已经是昨天了…)下午进了新需求,其中有一个登录模块,有登陆就少不了表单,借今天的踩坑过程聊一聊对 wechat miniprogram 中表单的认识,如有理解错误,还请留言告知,thx honey~😋😋😋

Key point✨

项目构建可参考 官方文档

done

view是这样的

<view class="login-wrap">
	<view class="menu-cover">
		<view class="item " bindtap='toggleLoginType' data-type='0'>账号密码登录</view>
		<view class="item " bindtap='toggleLoginType' data-type='1'>验证码登录</view>
		<view class="bb "></view>
	</view>

	<view class="form-ls">
		<input value="" bindinput='bindUsername' type="text" placeholder="请输入用户名" placeholder-style="color:#ccc"></input>
		<input value="" bindinput='bindPassworld' type="text" placeholder="请输入密码" placeholder-style="color:#ccc" wx-if=''></input>
		<input value="" bindinput='bindPassworld' type="password" placeholder="请输入密码" placeholder-style="color:#ccc" wx-if=''></input>
		<input value="" bindinput='bindRegCode' type="text" placeholder="请输入验证码" placeholder-style="color:#ccc" wx-if=''></input>

		<view class="iconfont  show-pswd" bindtap='togglePswd' wx-if=''></view>
		<view class="get-regCode" wx-if=''><text>获取验证码</text></view>
	</view>

	<button class="btn-login ">登录</button>
</view>

js是这样的

Page({

  /**
   * 页面的初始数据
   */
  data: {
    loginType:0, //0:账号密码登录 1:验证码登录
    showPswd:0, //0:密码 1:明文
    canSubmit:0, //0:不可提交 1:可提交

    username:'', //用户名
    passworld:'', //密码
    regCode:'', //验证码
  },

  /**
   * 自定义函数
   */
  // 切换登录方式
  toggleLoginType(e){
    let type = e.target.dataset.type
    // console.log(type)
    this.setData({
      loginType:type
    })
    this._canSubmit()
  },

  // 切换密码/明文
  togglePswd(){
    let showPswd = !this.data.showPswd
    // console.log(showPswd)
    this.setData({
      showPswd:showPswd
    })
  },

  // bind 用户名
  bindUsername(e){
    let username = e.detail.value
    this.setData({
      username:username
    })
    this._canSubmit()
  },

  // bind 密码
  bindPassworld(e){
    let passworld = e.detail.value
    this.setData({
      passworld:passworld
    })
    this._canSubmit()
  },

  // bind 验证码
  bindRegCode(e){
    let regCode = e.detail.value
    this.setData({
      regCode:regCode
    })
    this._canSubmit()
  },

  // 表单是否可提交
  _canSubmit(){
    let _username = this.data.username.length>0,
      _passworld = this.data.passworld.length>0,
      _regCode = this.data.regCode.length>0,
      _canSubmit = 0

    // console.log(_username,_passworld,_regCode,_canSubmit)

    if(this.data.loginType==0){ //账号密码登录
        _canSubmit = _username && _passworld
    }else{ //验证码登录
      if(_username && _regCode){
        _canSubmit = _username && _regCode
      }
    }
    this.setData({
      canSubmit:_canSubmit
    })
  },
})

css就不贴了,脑补一下吧😂

1.input 的双向绑定

疑问:

导致的问题:

2.无法通过 js 动态切换 type 值为 text/passworld

疑问:

导致的问题:

3.通过 js 变更的布尔值 在行内简写时行为与预期不符

疑问:

解决方案:

4.input 的层级遮盖问题

疑问:

解决方案:

总结