开发过程中,会经常遇到搜索需求,这就会涉及到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事件冲突