我已经实现了一个充当过滤器的搜索框。当用户在搜索区域中单击时,会显示一个下拉框,其中显示所有可能的选项。在搜索框中键入会过滤结果。在框外单击会隐藏结果。
它使用以下 HTML/CSS heiarchy
<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 事件之前触发,并且永远不会调用处理程序。我可以通过删除模糊绑定来纠正这个问题,但是,当输入失去焦点时,我不知道如何关闭我的下拉框。
有任何想法吗?