搜索框input失去焦点事件和结果列表li的click事件冲突问题

开发过程中,会经常遇到搜索需求,这就会涉及到input搜索框,外面还会有ul、div等搜索列表,

需要点击input外部进行操作时,收起或者隐藏搜索结果列表,首先我们会考虑到失去焦点来做

这就会有问题,点击事件和blur事件的先后执行

方法一:用setTimeout做的延迟隐藏(有小bug)

测试发现当鼠标点击并没有抬起是,会执行blur事件,(如果能接受的话)

我具体查了一下

blur事件,当元素失去焦点时触发的事件,为表单事件,blur和focus事件不会冒泡,其他表单事件都可以

click事件,当点击元素时触发的事件,适用于所有元素,会冒泡

所以,方法二:把click事件拆分成mouseup和mousedown事件

当鼠标点下,并未抬起时,让搜索框持续保持焦点状态

document.getElementsByTagName("input")[0].focus()

当鼠标抬起时,执行对应的操作,让搜索框失去焦点

document.getElementsByTagName("input")[0].blur()

这样子基本就解决了input失去焦点事件和搜索结果li的click事件冲突

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值