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

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

<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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3 中给下框的多个值绑定点事件弹出对应的统计图,可以采用以下步骤: 1. 在模板中,使用 `select` 元素创建下框,并使用 `v-model` 指令将选中的值绑定到一个 data 属性中; 2. 在 `select` 元素中,使用 `v-for` 指令遍历所有选项,并使用 `:value` 绑定每个选项的值; 3. 在 `select` 元素中,使用 `@change` 绑定一个方法,当选中的值发生变化时会触发该方法; 4. 在绑定的方法中,根据选中的值显示对应的统计图,可以使用条件语句或者对象字面量来根据选中的值判断应该显示哪个统计图。 下面是一个简单的示例代码: ``` <template> <div> <select v-model="selectedValue" @change="showChart"> <option v-for="(option, index) in options" :key="index" :value="option.value">{{ option.label }}</option> </select> <div v-if="selectedValue === 'pie'"> <pie-chart></pie-chart> </div> <div v-else-if="selectedValue === 'bar'"> <bar-chart></bar-chart> </div> </div> </template> <script> import PieChart from './PieChart.vue' import BarChart from './BarChart.vue' export default { components: { PieChart, BarChart }, data() { return { selectedValue: '', options: [ { label: '饼图', value: 'pie' }, { label: '柱状图', value: 'bar' } ] } }, methods: { showChart() { if (this.selectedValue === 'pie') { // 显示饼图 } else if (this.selectedValue === 'bar') { // 显示柱状图 } } } } </script> ``` 在这个示例中,我们通过 `v-model` 将选中的值绑定到 `selectedValue` 属性中,通过 `v-for` 遍历所有选项,并使用 `@change` 绑定 `showChart` 方法。在 `showChart` 方法中,根据选中的值显示对应的统计图。注意,在模板中使用 `v-if` 和 `v-else-if` 来根据条件显示不同的组件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值