javascript - 使用 OR 运算符链接多个 Jquery 事件

标签 javascript jquery jquery-events

我正在创建一个面板,该面板会在用户聚焦搜索框时向下滑动。 我的 Jquery 很糟糕,但仍在学习,我已经设法创建了基本功能:

$(document).ready(function() {
  $(".search-panel").hide();
  $("#search_form [type='text']")
    .focus(function() {
      $(".search-panel").slideDown("fast");
    })
    .focusout(function() {
      $(".search-panel").slideUp("fast");
    });
});

有了这个基本功能,在文本框外单击将折叠面板我正在尝试实现一组复杂的条件:

IF (textbox.focus) { show search panel}

IF (texbox.losefocus) && ( NOT search-panel.mouseover)
&& ( NOT (anything-in-search-panel-is-focused) )

基本上我需要确保用户没有悬停在面板上或以某种方式与面板交互,并且在我向上滑动文本框之前没有聚焦文本框。

JsFiddle的现状: http://jsfiddle.net/b9g9d6gf/

最佳答案

您应该在文档上绑定(bind)点击功能,而不是使用 .focusout() 功能。

$(document).ready(function () {
    $(".search-panel").hide();
    $("#search_form [type='text']")
        .focus(function () {
        $(".search-panel").slideDown("fast");
    });

    $(document).click(function(e) {
        if( !( $(e.target).is('#search_form *')) ){
           $(".search-panel").slideUp("fast");
        }
    });
});

如果文档在任何地方被点击,它会检查目标是否不是 #search_form 中的元素。如果没有,它将向上滑动 .search-panel

注意:
我删除了标签并将跨度更改为标签。单击标签还将(取消)选中其中的复选框。具有三个复选框使其行为错误。因此,要么制作三个单独的标签(而不是跨度),要么将其删除。

Updated Fiddle

关于javascript - 使用 OR 运算符链接多个 Jquery 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31383846/

相关文章:

javascript - Tab ReadyState 在第一个服务器响应之前返回 'complete'

jQuery 选择 : how to limit the number of selected values and provide an error message

Firefox 上的 jQuery 键盘导航中断

javascript - 两个元素使用相同的事件函数

javascript - 在 mouseup 事件处理程序中取消单击事件

javascript - 检测表单是否可见

javascript - 如何在 javascript 中显示 Javascript 变量?

javascript - body垂直滚动条到达后调用函数

javascript - IE9 通过屏蔽 Canvas 元素转发鼠标事件

javascript - 如何使用jquery在另一个html字段上显示多个下拉值