美文网首页
input输入中文时,偶先触发上层mouseleave的问题

input输入中文时,偶先触发上层mouseleave的问题

作者: 菜蚴菜 | 来源:发表于2024-03-31 18:17 被阅读0次
业务场景:

1、弹窗中有input输入框 2、弹窗监听mouseleave,当鼠标移出弹窗区域后,主动触发取消弹窗展示


<template>
  <div>
    <button @click="showDialog"></button>
    <!-- 弹窗 -->
    <div @mouseleave="selectLeave" v-if="isShow">
      <input />
    </div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      isShow: false
    };
  },
  methods: {
    showDialog() {
      this.isShow = true;
    },
    selectLeave() {
      this.isShow = false;
    }
  }
};
</script>
问题:

用户在输入框中输入中文时,偶现触发弹窗的mouseleave事件,造成弹窗关闭

问题产生的原因:

用户使用了三方输入法(测试使用了搜狗输入法),当输入中文唤起键盘并且键盘正好出现在鼠标所在的位置,导致弹窗失去了鼠标的焦点

解决方法:

1、初始解决方案:
①、定义一个全局变量isComposing:false
②、监听输入中文时的compositionstart,compositionend,当compositionstart时isComposing赋值为true ,compositionend时isComposing赋值为false
③、在selectLeave中判断isComposing为false时,才触发弹窗关闭
使用三方键盘输入中文时,并不会触发compositionstart,compositionend的监听事件
2、尽量避免使用监听鼠标移出的方式关闭弹窗,最好使用click点击弹窗之外区域的方式

相关文章

网友评论

      本文标题:input输入中文时,偶先触发上层mouseleave的问题

      本文链接:https://www.haomeiwen.com/subject/pxrbtjtx.html