美文网首页
微信小程序input每四位空格分隔及光标位置问题

微信小程序input每四位空格分隔及光标位置问题

作者: 牛奶是本命___ | 来源:发表于2020-06-01 14:12 被阅读0次

最近刚开始做小程序,有个需求是:用户输入兑换码时每四位用空格分隔,然后有焦点且有值时显示删除按钮,失焦点时隐藏删除按钮


image.png

话不多说先开始做,每四位用空格分隔简单:
给input标签绑定bindinput事件,然后在事件里处理

// wxml
<input type="text" value="{{activeCode}}" bindinput="codeInput" bindfocus="focusInput" bindblur="blurInput" placeholder="请输入兑换码"/>
<view class="clean" bindtap="clearInput">
    <image class="{{clearShow ? 'show' : ''}}" src="../../common/images/index_clean.png" mode="widthFix"></image>
</view>
// js
codeInput: function(e) {
    var str =value.replace(/\s/g,'').replace(/[^\w\.\/]/g,''); //移除输入框里的空格和特殊字符
    var newCode = '';
    if(str.length > 16) { // 限制输入长度
      newCode =str.substr(0,16); 
    }else{
      newCode = str;
    }
    newCode = newCode.replace(/\s/g,'').replace(/[^\w\.\/]/g,'').replace(/(\w{4})(?=\w)/g,"$1 "); // 每四位以空格分隔
// newCode.replace(/\s/g,'').replace(/[^\w\.\/]/g,'').replace(/(\w{4})(?=\w)/g,"$1-"); // 每四位以-分隔
    if(str.length){
        this.setData({
          clearShow: true
        })
    }else{
      this.setData({
          clearShow: false
      })
    }
},
focusInput: function(){
    var code = this.data.activeCode;
    if(code.length){
      this.setData({
        clearShow: true
      })
    }
  },
  blurInput: function(){
    var that = this;
    setTimeout(function(){
      that.setData({
        clearShow: false
      })
    }, 200)
  },

这时候遇到了一个问题,就是从中间删除或输入的时候,光标会置后,跑到最后面...

解决办法:
利用input标签的cursor属性
input value和cursor不能用setData赋值,用return

// wxml
   <input type="text" value="{{activeCode}}" bindinput="codeInput" bindfocus="focusInput" bindblur="blurInput" placeholder="请输入兑换码" cursor="{{cursor}}" />
// js
   codeInput: function(e) {
        var value = e.detail.value;
        var pos = e.detail.cursor;
        var str =value.replace(/\s/g,'').replace(/[^\w\.\/]/g,'');
        var newCode = '';
        if(str.length > 16) {
          newCode =str.substr(0,16); 
        }else{
          newCode = str;
        }
        var posAfterText = "";
        var posPreText = "";//前面的是否是空格
        var isNextBlank = false;//后面的是否是空格
        var isPreBlank = false;
        var isLastPos = true;
        if (pos != value.length) {//不是最后一个
            posAfterText = value.substr(pos, 1);
            posPreText = value.substr(pos - 1, 1);
            isNextBlank = /^\s+$/.test(posAfterText);
            isPreBlank = /^\s+$/.test(posPreText);
            isLastPos = false;
        }
        newCode = newCode.replace(/\s/g,'').replace(/[^\w\.\/]/g,'').replace(/(\w{4})(?=\w)/g,"$1 ");
        if(e.detail.keyCode == 8){
        if(str.length){
          this.setData({
            clearShow: true
          })
          this.data.activeCode = newCode
          return {
            value: newCode,
            cursor: e.detail.cursor,
          }
        }else{
          this.setData({
            clearShow: false
          }) 
          this.data.activeCode = newCode
          return {
            value: newCode,
            cursor: e.detail.cursor,
          }
          this.data.activeCode = newCode
        }
      }else{
        this.data.activeCode = newCode
          if(str.length){
            if (!isLastPos) {
              if (isNextBlank) {
                this.setData({
                  clearShow: true,
                })
                return {
                  value: newCode,
                  cursor: pos+1
                }
              } else {
                this.setData({
                clearShow: true,
              })
              return {
                value: newCode,
                cursor: pos
              }
            }
          } else {
            this.setData({
              clearShow: true,
            })
            return {
              value: newCode,
              cursor: pos+1
            }
          }
        } else {
          this.setData({
            clearShow: false
          }) 
          return {
            value: newCode,
            cursor: pos+1
          }
        }
      }
    },

相关文章

网友评论

      本文标题:微信小程序input每四位空格分隔及光标位置问题

      本文链接:https://www.haomeiwen.com/subject/oqyfzhtx.html