jquery点击click事件和blur事件冲突如何解决

时间:2021-06-28 22:39:43

最近做了一个查询小功能,input输入框输入文字后,自动列出几条查询结果,可以键盘上下键或鼠标进行查询结果选择,并且点击输入框其他地方要隐藏这个列出的结果。

但比较头疼的是input上添加blur事件和查询提示结果click事件发生冲突,点击查询结果时,会首先触发input的blur事件,导致将查询提示结果隐藏选择不了,

 

解决办法:

给blur失去焦点事件添加延迟事件,让blur事件在click事件后执行。

 

$( ".query_tools" ).blur( function (event){
     setTimeout( function  () {
         $( ".query_list" ).css( "display" "none" );
     }, 300);
});
 
另一个解决方案有bug,
2.添加mouseover,mouseout 。前者删除blur事件,后者添加回来。鼠标在click执行之前先执行了mouseover事件,删除blur就不会隐藏了,然后点击完成后,mouseout再把blur添加回来,就行了。(mouseover ,mouseout不会转移焦点)。
测试的是chrome浏览器。