使用 :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结合使用(在IE7中有效)来使div消失:
#suggest:hover {
display: block !important;
}
$("#name").focus(function() {
$("#suggest").show();
}).blur(function() {
$("#suggest").hide();
});
这种方法的问题在于,单击div后,只要将鼠标移开,div就会消失。
jsFiddle:
http://jsfiddle.net/nbYnt/4/
unselectable
属性可以防止 IE<9 中的鼠标按下目标窃取焦点的人。简化方法:不必给每个元素都添加该属性,只需在 mousedown 事件上设置该属性,例如onmousedown="event.target.unselectable = true; return false
。http://jsbin.com/yagekiji/1/ - Han Seoul-Oh