使用 :active 而不是 :hover 以在鼠标按钮按下时应用 CSS。
我认为阻止模糊事件不会完全符合您的要求,因为如果用户单击输入,然后单击 div,然后单击页面上的其他位置,则 div 将保留。我可以想到几个不同的选择,每个都有自己的陷阱。当用户停留在页面内时,此选项将正常运行,但如果用户移动到地址栏,则 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;
}
请注意,您需要在 div 上放置一个 tabindex 才能使 CSS 方法起作用:
<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/