マウスボタンが押されているときにCSSを適用するには、:hoverの代わりに:activeを使用します。
ユーザーが入力をクリックしてからdivをクリックし、次にページの他の場所をクリックするとdivが残るため、blurイベントを防止しても期待どおりの結果が得られるとは思いません。それぞれに落とし穴があるいくつかの異なるオプションを考えることができます。これは、ユーザーがページ内にいる間は正しく動作しますが、ユーザーがアドレスバーに移動した場合はdivが表示されたままになります。
$("html").on("focus", "#name", function() {
$("#suggest").show();
}).mousedown(function() {
$("#suggest").hide();
}).on("mousedown", "#name, #suggest", function(e) {
e.stopPropagation();
});
jsFiddle: http: //jsfiddle.net/nbYnt/2/
IE7をサポートする必要がない場合は、CSSだけを使用してこれを行うことができます(IE8を含む最新のブラウザーで期待どおりに機能します)。
#suggest {
display: none;
}
#name:focus + #suggest, #suggest:focus {
border: none;
display: block;
}
CSSメソッドを機能させるには、divにtabindexを配置する必要があることに注意してください。
<div id="suggest" tabindex="-1">
jsFiddle: http: //jsfiddle.net/nbYnt/1/
最後に、JavaScriptとCSSを組み合わせることで、divが消えるという側面を誤ることができます(これはIE7で機能します)。
#suggest:hover {
display: block !important;
}
$("#name").focus(function() {
$("#suggest").show();
}).blur(function() {
$("#suggest").hide();
});
この方法の問題は、divをクリックした後、マウスを離すだけでdivが消えることです。
jsFiddle: http: //jsfiddle.net/nbYnt/4/