最近遇到一个需求,输入框输入关键词,要出一个带输入建议的弹框,类似于ElementUI自带的<el-autocomplete>,只是需求中的弹框底部有个分页功能,因此用不了自带的<el-autocomplete>,只好自己写了。
然后就遇到blur和click冲突的问题了…

<div class="poi-element"><el-input class="poi-input" ref="poiRef" v-model="poiKeyword" @input="poiInputDebouce"@blur="poiBlurFocus('blur')" @focus="poiBlurFocus('focus')"placeholder="请输入POI关键词" /><div v-if="poiPopperShow" class="poi-popper"><div class="poi-popper__arrow"></div><div class="poi-content"><div v-for="(item, idx) in poiResult" :key="idx" class="poi-content__item" @mousedown.prevent="handlePoi(item)">{{item.name}}</div></div><div v-if="poiPageNo && poiPageTotal" class="page-ware"><div class="page-info" @mousedown.prevent="poiPageTurn(-1)">上一页</div><div class="page-info" @mousedown.prevent="poiPageTurn(1)">下一页</div><div class="">{{poiPageNo}}/{{poiPageTotal}}</div></div></div>
</div>

解决如下:
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事件。

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

  1. [JavaScript]搜索框中文/英文/拼音匹配过滤逻辑/input的focus和下拉框的click冲突解决/点击条目后focus二次点击不生效问题解决

    效果图 思路: 输入框的逻辑: 要监控input的输入,根据框架自己选择绑定事件 要有focus和blur的方法,input的focus和下拉框的click冲突的话应该用mousedown 展开下拉框 ...

  2. 商品类型的下拉框绑定一个事件,通过ajax获取属性

    html代码这么写 <!-- 商品属性 --> <table cellspacing="1" cellpadding="3" width=&q ...

  3. html中下拉列表监听事件,ExtJS 下拉框监听事件、日期选择器监听事件、实现动态给items添加删除数据...

    本文将为您描述ExtJS 下拉框监听事件.日期选择器监听事件.实现动态给items添加删除数据,具体实现方法: 1.下拉框 下拉框选择时,触发事件的方法: 在 Ext.form.ComboBox 组件 ...

  4. extjs 点击下拉框三角形触发事件_省市县三级联动下拉框的具体实现

    功能需求: ①页面中有三个下拉框选项,分别为省下拉框,市下拉框,区/县下拉框 ②选择省,则市下拉框中出现对应的该省下的市信息,选择市则区/县下拉框中出 现对应的该市下面的区/县信息. 需求分析(思路) ...

  5. MVVM下拉框绑定触发事件

    开发工具与关键技术:MVVM 撰写时间:2021年06月15日 在MVVM中下拉框的绑定跟MVC的下拉框绑定基本一样,只不过在MVVM中要写多一步声明下拉框的属性来接收数据. 首先我们要在DAL层写查 ...

  6. xm-select 下拉框分组单选事件

    xm-select 下拉框分组单选事件 效果图 分组基本写法自行查看官网 xm-select官网 官网下拉框分组写法中未含有 单选 操作样式,所以我们得自己增加on里面的监听事件,数据中的Parent ...

  7. dhtmlXGrid复选框点击事件

    dhtmlXGrid复选框点击事件 var mygrid; //加载初始界面 $(function () {mygrid = new dhtmlXGridObject('tdh_colour');my ...

  8. Vue.js基础-07-绑定事件(v-on)-01-点击事件(click)

    文章目录 1. 点击事件参数(click) 1.1 基本使用 1.2 绑定一个方法 1.3 冒泡事件 说明 示例 2. 点击事件修饰符 2.1 .stop (阻止冒泡) 使用说明 使用示例 2.2 c ...

  9. android动画结束弹出文本框,学完(Android疯狂猜歌 5-2 实现待选文字框点击事件)课程出现的小问题...

    疯狂猜歌 5-2 实现待选文字框点击事件  自定义的GirdView中,holder的值是a0...a23 holder如果定义在getView 里就没事,点击a1就显示a1,但是,如果定义在成员变量 ...

最新文章

  1. sock 文件方式控制宿主机_nginx与php-fpm通信的两种方式
  2. java两个函数名字相同_为什么C不允许两个具有相同名称的函数/类模板,只有非类型模板参数(整数类型)的类型不同?...
  3. 记录一个班级的成绩练习一维数组
  4. 轻松搞懂sscanf和sprintf
  5. Hive安装及常用交互命令
  6. Fiori应用里application dependency里奇怪的manifest url是从哪来的
  7. Android之多线程断点下载
  8. android程序怎么导出数据库,将android程序中的数据库导出到SD卡
  9. java二进制命令_Java二进制指令代码解析
  10. 用动态规划解决最长公共子序列
  11. BiliBili后台源码45MB全部泄露,中奖概率写在注释里,密码硬编码,看懂了你就欧气满满(提供下载)!
  12. 【解决】简单有效的使用lodop打印小票功能
  13. 淘客外卖返利小程序搭建 - 美团联盟外卖返利小程序平台、饿了么返利小程序系统、外卖cps小程序
  14. transition参数css,css3的transition属性详解
  15. mysql的append用法_insert 中append 用法详解
  16. C语言程序设计精髓(MOOC第12周 )题
  17. 穷养儿富养女 很多人都不知道这句话的真正含义
  18. 小帮手打卡系统分析~
  19. TKeed源码解析之URI解析
  20. 一文总结十大经典排序算法(思维导图 + 动图演示 + 代码实现 C/C++/Python + 致命吐槽)

热门文章

  1. 每日学习 1111--1117
  2. certutil(certutilexe应用程序错误)
  3. SAP Calendar 设置
  4. 亚信科技 HVV面试复盘
  5. 流量复制-----tcpcopy的使用(1)
  6. 软件测试模糊搜索用例,模糊测试中测试用例生成方法.pdf
  7. 技术交流群加入方式开放
  8. Pandas 读取Excel并设定n列做MultiIndex
  9. Outlook 如何打开或关闭邮件预览功能
  10. 扎牢基础,深入底层,面试我可造火箭:MySQL+JVM+23种设计模式