搜索框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事件冲突

猜你喜欢

转载自blog.csdn.net/heyNewbie/article/details/106641986