我在输入元素上设置了焦点事件。当有焦点时,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);
        }
    })
});

其他提示

您可以尝试执行以下操作:

  1. 绑定焦点事件处理程序
  2. 获得焦点后,在显示的div上绑定blur的事件处理程序+mouseenter的事件处理程序
  3. 在显示的 div 上的 mouseenter 上,从输入字段解除模糊事件的绑定
  4. 在显示的 div 上的 mouseleave/其他合适的事件上,将模糊事件侦听器重新绑定到输入字段。

如果没有更多的信息,我不能告诉你太多,只是如果我是你,我会尝试使用更改文本输入元素,而不是聚焦和模糊的事件。如果你描述更多你想实现什么,我也许能够更具体。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top