javascript - jQuery 中下拉搜索框的模糊问题

标签 javascript jquery html drop-down-menu onblur

我实现了一个充当过滤器的搜索框。当用户在搜索区域中单击时,将显示一个下拉框,显示所有可能的选项。在搜索框中键入会过滤结果。在框外单击可隐藏结果。

它使用以下 HTML/CSS 层次结构

<div class="search">
    <input type="text" name="search" value="search" placeholder="search"/>
    <div class="results">
        <div class="result">
            Result 1
        </div>
        <div class="result">
            Result 2
        </div>
        ...
    </div>
</div>

我使用 jQuery 来显示/隐藏焦点/模糊事件的下拉列表

var searchBar = {
    init : function(){
        $('input[name=search]').focus(searchBar.openSearch);
        $('input[name=search]').blur(searchBar.closeSearch);
        $('div.result').each(function(e){
            $(this).click(draftboardDynamic.selectResult);
        }); 
    },
    openSearch : function(e){
        $('div.results').show();
    },
    closeSearch : function(e){
        $('div.results').hide();
    },
    selectResult : function(e){
        console.log($(this));
    },
}
$(document).ready(searchBar.init);

这工作得很好,我可以毫无问题地打开、关闭和搜索(为清楚起见删除了 JS)。我唯一遇到的麻烦是选择结果。 blur 事件似乎在 result.click 事件之前触发,并且永远不会调用处理程序。我可以通过删除模糊绑定(bind)来纠正这个问题,但是,我不知道如何在输入失去焦点时关闭我的下拉框。

有什么想法吗?

最佳答案

这很难,因为 .blur 事件总是在 .click 之前触发。有两种可能的解决方案,但都不是特别理想:

  1. 将鼠标悬停在 div.result 上时取消绑定(bind) .blur 事件。在鼠标移出时重新绑定(bind)它。
  2. 不要使用 .blur 执行此操作,而是将点击事件绑定(bind)到文档并检查目标是否不是搜索组件之一。

关于javascript - jQuery 中下拉搜索框的模糊问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10627571/

相关文章:

javascript - 对象未定义或为空

javascript - 两次追加 DOM 元素 (jQuery)

Javascript getFullYear() 返回错误的年份

javascript - 如何为 Jest 指定模块目录?

javascript - 如何使用 javascript 打开文件/浏览对话框?

css - iOS 上带有 Phonegap 的多个 WebView

html - 如何在html中放置没有文字的图像

javascript - 如何在 Javascript 中从我的 ul 中移动最后一个 li 之后创建的 li

javascript - Mocha 不捕获未声明的变量

java - 将 JSON 数据从 JQUERY 传递到 java Controller 时出现异常