javascript-侦听器单击和聚焦问题

问题描述

我正在使用javascript开发自动补全系统。 我有一个输入( searchInput ),当我在其中输入一些文本时,它会根据结果用div来更新div( resultsDiv )。 在每个添加的结果上,我都添加一个调用函数的eventListener。

div.addEventListener('click',function(e) {
  chooseResult(e.target); //this function write the selected result in searchInput
});

一切正常,但是现在我要在焦点不在 searchInput 上时隐藏 resultsDiv 。 所以我做到了

searchInput.addEventListener('focusout',function(e) {
  resultsDiv.style.display = 'none';
});

问题在于,每个结果上的事件 click 都不再起作用,因为当我单击结果div时,我不再关注 searchInput ,因此隐藏了searchInput,未调用函数 chooseResult ...

我需要聚焦,因为如果我没有聚焦,即使选择其他字段, resultsDiv 仍然可见。

有人知道该怎么做吗?还是解决方法? 谢谢


编辑

我找到了解决方法。在对焦点事件进行设置时,设置了一个超时,该超时稍后会调用一个隐藏resultDiv的函数,因此事件单击就有时间发生。

searchInput.addEventListener('focusout',function(e) {
   setTimeout(hideResultsDiv,150);
});

function hideResultsDiv() {
   resultsDiv.style.display = 'none';
}

在我看来,这有点棘手,但确实可以。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)