input输入踩坑

背景:

最近在做管理后台的项目时,遇到一个问题:在input输入过程中实时搜索,如果输入英文实时搜索时没有问题的,但是在拼写输入时,拼写未完成就已经发送了请求,比较浪费接口的性能。

解决方案:

当用户使用拼音输入法开始输入汉字时,会触发compositionstart,当拼写完成时会触发compositionend事件。利用这两个事件对拼写输入进行处理。

代码实现:

<template>
  <div>
    <input @input="handleInput" @compositionstart="compositionstart" @compositionend="compositionend" :value="message" ref="inputRef"/>
  </div>
</template>
<script>
    export default {
      data () {
        return {
          message: ''
        }
      },
      methods: {
        handleInput (e) {
          this.message = e.target.value
          setTimeout(() => {
            if (!this.flag) {
              this.search(this.message)
            }
          }, 0)
        },
        compositionstart () {
          this.flag = true
        },
        compositionend () {
          this.flag = false
        },
        search () {
          // TODO: 进行接口请求
          console.log('search', this.message)
        }
      }
    }
</script>

代码答疑:

1、在@input时,判断this.flag是否为假值,如果为假值,正常请求接口,拼写开始时,在compositionstart时将其置为true,在拼写过程中,不再进行接口请求,直到拼写完成触发compositionend,将this.flag置为false,@input再次正常请求接口。

2、@input会先于compositionstart执行,此时的this.flag尚未被置为true,所以需要使用setTimeout将其优先级滞后。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容