题
我在输入元素上设置了焦点事件。当有焦点时,jQuery 搜索 div 并显示它。这样可行。在同一个输入元素上的模糊事件中,我使 div 隐藏,这也有效。但是,当我单击链接或想要选择显示的 div 中的文本时,它会由于模糊事件而立即消失。我怎样才能对显示的 div 进行例外处理?
$("input.search-main-text").focus(function() {
$("div.quickResults").show();
});
$("input.search-main-text").blur(function() {
$("div.quickResults").hide();
});
解决方案
$("input.search-main-text").bind('focus', function() {
$("div.quickResults").show();
$(document).bind('mousedown', function(e) {
if (! $(e.target).closest('div.quickResults').length) {
$("div.quickResults").hide();
$(document).unbind('mousedown', arguments.callee);
}
})
});
其他提示
您可以尝试执行以下操作:
- 绑定焦点事件处理程序
- 获得焦点后,在显示的div上绑定blur的事件处理程序+mouseenter的事件处理程序
- 在显示的 div 上的 mouseenter 上,从输入字段解除模糊事件的绑定
- 在显示的 div 上的 mouseleave/其他合适的事件上,将模糊事件侦听器重新绑定到输入字段。
如果没有更多的信息,我不能告诉你太多,只是如果我是你,我会尝试使用更改文本输入元素,而不是聚焦和模糊的事件。如果你描述更多你想实现什么,我也许能够更具体。
不隶属于 StackOverflow