vue--H5實(shí)現(xiàn)模糊查找

一、需求:

需要根據(jù)一個(gè)本地的數(shù)據(jù),實(shí)現(xiàn)本地?cái)?shù)據(jù)的模糊查找。具體需求就是根據(jù)本地?cái)?shù)據(jù),在手機(jī)輸入框輸入一個(gè)字或者多個(gè)字時(shí)實(shí)現(xiàn)模糊查找的效果。

二、實(shí)現(xiàn)原理:

正則匹配

三、難點(diǎn):

1、知道用戶正在輸入的是中文還是英文。如果是中文,在打字的時(shí)候,不能觸發(fā)模糊搜索的方法,如果是輸入的英文,那么就應(yīng)該在輸入第一個(gè)字母時(shí)就要觸發(fā),所以在vue中,input的change事件顯然是不能滿足的,因?yàn)閏hange事件在input改變時(shí)就會(huì)觸發(fā),不會(huì)分辨是英文還是中文。所以,這里我們用到input的兩個(gè)屬性:

  • compositionstart:事件觸發(fā)于一段文字的輸入之前,通俗來說就是中文輸入開始時(shí),包括一連串的鍵盤操作。
  • compositionend:當(dāng)文本段落的組成完成或取消時(shí)觸發(fā),所以有了這兩個(gè)事件我們就可以正確的觸發(fā)模糊搜索事件。
代碼:
<input 
  v-model="inputMachine"
  type="text"
  placeholder="請(qǐng)輸入內(nèi)容進(jìn)行模糊查找"
  maxlength="10"
  @compositionstart="flag = true"
  @compositionend="flag = false"
>
// 模糊查詢方法,keyWor為input輸入的內(nèi)容,dataBase為數(shù)據(jù)源
fuzzyQuery(keyWord, dataBase){
  let reg =  new RegExp(keyWord);
  let arr = [];
  for (let i = 0; i < dataBase.length; i++) {
  if (reg.test(dataBase[i].sname)) {
  arr.push(dataBase[i]);
  }
  }
  return arr;
},                        

觸發(fā)這個(gè)模糊查找方法,可以通過vue中的wacth事件觸發(fā),或者change事件,判斷flag為true或者false來執(zhí)行方法。但是還有一個(gè)問題就是,如果輸入的中文或者英文太快的話,就會(huì)不斷調(diào)用方法,就會(huì)出現(xiàn)如果上一次的輸入結(jié)果還沒有查找出來,又觸發(fā)了下一個(gè)查找,就會(huì)有最后一次輸入內(nèi)容查找不正確的情況。所以針對(duì)這個(gè)情況,做了一個(gè)節(jié)流的處理。代碼如下:

watch:{
    inputMachine(){
      if(this.timer){
        clearTimeout(this.timer)
      }
      this.timer = setTimeout(() =>{
        this.changeMachine()
      },1500)
    },
    deep: true,
  },

觸發(fā)的時(shí)間長(zhǎng)短可以根據(jù)需求自己設(shè)定,這樣就不會(huì)造成上述問題了,前端模糊查找也實(shí)現(xiàn)了。

下面是compositionend和compositionstart的參考文檔;

https://developer.mozilla.org/zh-CN/docs/Web/Events/compositionend

https://developer.mozilla.org/zh-CN/docs/Web/Events/compositionstart

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的。 ??事件,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,716評(píng)論 1 11
  • 本文介紹移動(dòng)端輸入框 上觸發(fā)的與用戶輸入有關(guān)的事件,總結(jié)移動(dòng)端與pc端上這些事件的差別,主要關(guān)注點(diǎn)在事件觸發(fā)的順序...
    ykliu閱讀 10,217評(píng)論 0 3
  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點(diǎn)的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點(diǎn)是DOM的常...
    凜0_0閱讀 1,531評(píng)論 0 8
  • 讀書足以恰情,足以博采,足以長(zhǎng)才。 其恰情也,最見于獨(dú)處幽居之時(shí),其博采也,最見于高談圓論之中,其長(zhǎng)才也,最見于處...
    英語老師青城閱讀 1,126評(píng)論 1 1
  • 心之何如,有似萬迷津渡,其中并無舟子可以渡人。除了自渡,他人愛莫能助。 ...
    賣眼鏡的畫畫熊Rx閱讀 215評(píng)論 2 2

友情鏈接更多精彩內(nèi)容