フィルターとして機能する検索ボックスを実装しました。ユーザーが検索領域をクリックすると、可能なすべてのオプションを示すドロップダウン ボックスが表示されます。検索ボックスに入力すると、結果がフィルタリングされます。ボックスの外側をクリックすると、結果が非表示になります。
次の 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 イベントの前にトリガーされるようで、ハンドラーが呼び出されることはありません。ぼかしバインディングを削除することでこの問題を修正できますが、入力がフォーカスを失ったときにドロップダウン ボックスを閉じる方法がわかりません。
何か案は?