vue--H5实现模糊查找

一、需求:

需要根据一个本地的数据,实现本地数据的模糊查找。具体需求就是根据本地数据,在手机输入框输入一个字或者多个字时实现模糊查找的效果。

二、实现原理:

正则匹配

三、难点:

1、知道用户正在输入的是中文还是英文。如果是中文,在打字的时候,不能触发模糊搜索的方法,如果是输入的英文,那么就应该在输入第一个字母时就要触发,所以在vue中,input的change事件显然是不能满足的,因为change事件在input改变时就会触发,不会分辨是英文还是中文。所以,这里我们用到input的两个属性:

  • compositionstart:事件触发于一段文字的输入之前,通俗来说就是中文输入开始时,包括一连串的键盘操作。
  • compositionend:当文本段落的组成完成或取消时触发,所以有了这两个事件我们就可以正确的触发模糊搜索事件。
代码:
<input 
  v-model="inputMachine"
  type="text"
  placeholder="请输入内容进行模糊查找"
  maxlength="10"
  @compositionstart="flag = true"
  @compositionend="flag = false"
>
// 模糊查询方法,keyWor为input输入的内容,dataBase为数据源
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;
},                        

触发这个模糊查找方法,可以通过vue中的wacth事件触发,或者change事件,判断flag为true或者false来执行方法。但是还有一个问题就是,如果输入的中文或者英文太快的话,就会不断调用方法,就会出现如果上一次的输入结果还没有查找出来,又触发了下一个查找,就会有最后一次输入内容查找不正确的情况。所以针对这个情况,做了一个节流的处理。代码如下:

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

触发的时间长短可以根据需求自己设定,这样就不会造成上述问题了,前端模糊查找也实现了。

下面是compositionend和compositionstart的参考文档;

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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 8,925评论 1 11
  • 本文介绍移动端输入框 上触发的与用户输入有关的事件,总结移动端与pc端上这些事件的差别,主要关注点在事件触发的顺序...
    ykliu阅读 13,366评论 0 3
  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 5,279评论 0 8
  • 读书足以恰情,足以博采,足以长才。 其恰情也,最见于独处幽居之时,其博采也,最见于高谈圆论之中,其长才也,最见于处...
    英语老师青城阅读 4,704评论 1 1
  • 心之何如,有似万迷津渡,其中并无舟子可以渡人。除了自渡,他人爱莫能助。 ...
    卖眼镜的画画熊Rx阅读 1,490评论 2 2

友情链接更多精彩内容