微信小程序input每四位空格分隔及光標(biāo)位置問題

最近剛開始做小程序弦赖,有個(gè)需求是:用戶輸入兌換碼時(shí)每四位用空格分隔价涝,然后有焦點(diǎn)且有值時(shí)顯示刪除按鈕亡资,失焦點(diǎn)時(shí)隱藏刪除按鈕


image.png

話不多說先開始做炮赦,每四位用空格分隔簡單:
給input標(biāo)簽綁定bindinput事件怜跑,然后在事件里處理

// wxml
<input type="text" value="{{activeCode}}" bindinput="codeInput" bindfocus="focusInput" bindblur="blurInput" placeholder="請(qǐng)輸入兌換碼"/>
<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)
  },

這時(shí)候遇到了一個(gè)問題,就是從中間刪除或輸入的時(shí)候吠勘,光標(biāo)會(huì)置后性芬,跑到最后面...

解決辦法:
利用input標(biāo)簽的cursor屬性
input value和cursor不能用setData賦值,用return

// wxml
   <input type="text" value="{{activeCode}}" bindinput="codeInput" bindfocus="focusInput" bindblur="blurInput" placeholder="請(qǐng)輸入兌換碼" 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) {//不是最后一個(gè)
            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
          }
        }
      }
    },

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末剧防,一起剝皮案震驚了整個(gè)濱河市植锉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌峭拘,老刑警劉巖俊庇,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狮暑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辉饱,警方通過查閱死者的電腦和手機(jī)搬男,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彭沼,“玉大人止后,你說我怎么就攤上這事×锔” “怎么了译株?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長挺益。 經(jīng)常有香客問我歉糜,道長,這世上最難降的妖魔是什么望众? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任匪补,我火速辦了婚禮,結(jié)果婚禮上烂翰,老公的妹妹穿的比我還像新娘夯缺。我一直安慰自己,他們只是感情好甘耿,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布踊兜。 她就那樣靜靜地躺著,像睡著了一般佳恬。 火紅的嫁衣襯著肌膚如雪捏境。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天毁葱,我揣著相機(jī)與錄音垫言,去河邊找鬼。 笑死倾剿,一個(gè)胖子當(dāng)著我的面吹牛筷频,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播前痘,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼凛捏,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了际度?” 一聲冷哼從身側(cè)響起葵袭,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乖菱,沒想到半個(gè)月后坡锡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蓬网,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年鹉勒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帆锋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡禽额,死狀恐怖锯厢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情脯倒,我是刑警寧澤实辑,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站藻丢,受9級(jí)特大地震影響剪撬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悠反,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一残黑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧斋否,春花似錦梨水、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至笼恰,卻和暖如春踊沸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背社证。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留评凝,地道東北人追葡。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像奕短,于是被迫代替她去往敵國和親宜肉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348