Vue input的blur事件影响下拉框中点击事件的解决方案 用mousedown/mousedown替代click

文章介绍了在Vue组件中遇到的点击事件click与失去焦点事件blur冲突的问题,以及解决方案。通过将click替换为mousedown来优先处理,或者在blur事件中添加setTimeout延迟处理,确保正确执行。还详细解释了mousedown、mouseup和click事件的触发顺序和条件。
摘要由CSDN通过智能技术生成

效果:
在这里插入图片描述
代码:

<div class="searchModal_caiz">
  <Input search placeholder="请输入要搜索的内容" v-model="searchValue_caiz" @on-search="searchData_caiz" @on-blur ="hideSearchModal_caiz_groups"
        @on-focus="showSearchModal_caiz_groups"
    />
    <ul class="searchModal_caiz_groups" v-if="searchTextCaizStatus">
        <li v-for="item in searchTextCaiz" :key="item.id" @mousedown.left.prevent="searchLocation(item)">{{ item.code + ' ' + item.name  }}</li>
    </ul>
</div>

***当时 li 的事件使用的是click,它先执行的是blur,不会继续执行click,也尝试了给click.self不管用,找到博主的分享改成了 mousedown ***

解决如下:

1.在blur事件方法内部根据自身逻辑加个延迟(setTimeout)处理。
2. 将click换成优先级更高的mousedown,mousedown优先于blur执行(mousedown > mouseup > click)
PS:核心就是用mousedown和mouseup替代click,然后根据相关的需求,模拟出blur或focus的样子即可。

一、三个事件的触发时机

mousedown
当鼠标指针移动到元素上方,并按下鼠标按键(左、右键均可)时,会触发 mousedown 事件。
与 click 事件不同,mousedown 事件仅需要按键被按下,而不需要松开即可发生。

mouseup
当在元素上松开鼠标按键(左、右键均可)时,会触发 mouseup 事件。
与 click 事件不同,mouseup 事件仅需要松开按钮。当鼠标指针位于元素上方时,放松鼠标按钮就会触发该事件。

click
当鼠标指针停留在元素上方,然后按下并松开鼠标左键时,就会触发一次 click 事件。

二、注意
触发click事件的条件是按下并松开鼠标左键!按下并松开鼠标右键并不会触发click事件。
三个事件的触发顺序:
若在同一个元素上按下并松开鼠标左键,会依次触发mousedown、mouseup、click,前一个事件执行完毕才会执行下一个事件。
若在同一个元素上按下并松开鼠标右键,会依次触发mousedown、mouseup,前一个事件执行完毕才会执行下一个事件,不会触发click事件。
————————————————
版权声明:本文为CSDN博主「不知言」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/WangYanWenXin/article/details/123416923

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值