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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值